首页 > 数据库 > 数据库开发技术 > 用aardio来做网络爬虫,一键打包成exe
之前一直使用Python做爬虫,Python在爬虫方面的优势毋庸置疑。丰富的第三方库加上简洁的语法可以在写爬虫时提供天然的便利。
但是如果不是给企业写的爬虫,而是给个人用的一些减少工作量的工具,Python有一个很不方便的点:无法编译成可执行文件。用起来有门槛。
虽然可以用打包工具(例如Nuitka和pyinstaller)来将Python打包成exe,但它其实就是给你带了一个Python环境,如果打包成整个exe的话,会将Python整个环境都打包到exe里,使用起来并不方便。
所以就有了这个想法:如果可以用aardio做爬虫的话,那么打包成exe不就很方便了,而且文件也小。如果你不想公开源代码的话,aardio编译之后也无法被还原,可以很好的保护源代码。
做爬虫必要的一些第三方库如下:
在aardio中,上面的很多功能库都没有,有的虽然有,但是并不好用。所以我打算重写一下库,给aardio适配这些功能。
目前已完成或待完成的库有:
待完成):实现一些常见的加密算法,例如aes和des,其他的算法aardio里都有待完成): 用于执行js代码的引擎,微软开源的待完成):我也想用aardio实现Python的drissionpage库,本质上就是cdp协议。可以用于浏览器模拟自动化。更强大的自动化工具还得是playwright和puppeteer待完成):封装Python的ddddocr做验证码识别不完成):采集框架暂不在计划内,因为我没打算做一个类似八爪鱼的东西,只是想做些小工具而已。平常的http请求库足够用了。正式给公司做采集肯定还是用Python一些常见的数据库操作在aardio中基本都有,遇到没有的再封装。其实如果遇到在aardio中没有的,可以看看C++、go有没有实现,然后封装成dll就能在aardio中使用。
库的代码更新:https://github.com/kanadeblisst00/aardio-extlibs
目前在计划的内容有:
志远一期二期先说一下 kirequests的一些基本用法:
var resp = kirequests.get("https://www.httpbin.org/get",{"a":1,"b":2})
console.dump(resp.status)
console.dump(resp.text)
console.dump(resp.json())
var resp = kirequests.get("https://www.httpbin.org/get",{"a":1,"b":2},{"User-Agent": "aardio"})
console.dump(resp.status)
console.dump(resp.text)
console.dump(resp.json())
var params = {"url": "https://www.baidu.com"}
// 注入关键词参数和位置参数不能混用
var resp = kirequests.get(url="https://www.httpbin.org/redirect-to",params=params,redirect=false)
// 这样写也可以
//var resp = kirequests.get("https://www.httpbin.org/redirect-to",params,,false)
var resp = kirequests.get(url="https://www.httpbin.org/basic-auth/root/123456",auth={"root";"123456"})
var resp = kirequests.post(url="https://www.httpbin.org/post",data={"a":1,"b":2})
var resp = kirequests.post(url="https://www.httpbin.org/post",json={"a":1,"b":2})
// 这样也可以
import web.json;
var postData = web.json.stringify({"a":1,"b":2})
var resp = kirequests.post(url="https://www.httpbin.org/post",data=postData)
import kirequests.session;
var ses = kirequests.session(,"http://root:123456@127.0.0.1:10809",)
var resp = ses.get("https://www.httpbin.org/get")
import kirequests.session;
var cookies = {
{"name":"a","value":"a","domain":".httpbin.org"};
{"name":"b","value":"b","domain":"www.httpbin.org"}
{"name":"c","value":"c","domain":".httpbin.org"}
{"name":"d","value":"d","domain":"www.httpbin.org"}
}
var ses = kirequests.session(,,cookies)
var resp = ses.get("https://www.httpbin.org/get")
import kirequests.session;
var ses = kirequests.session()
ses.setTimeouts(2000,2000,2000)
var resp = ses.get("https://www.httpbin.org/get")
网站:https://ssr3.scrape.center/
import console;
import kirequests
import htmlquery;
io.open()
resp = kirequests.get(url="https://ssr3.scrape.center/",auth={"admin","admin"})
var html = resp.text;
var doc = htmlquery.Parse(html)
var nodeList = htmlquery.Find(doc, '//div[@class="el-card item m-t is-hover-shadow"]')
for i,node in nodeList{
var h2Node = htmlquery.FindOne(node, './/h2');
var title = htmlquery.InnerText(h2Node)
var tagNodeList = htmlquery.Find(node, './/button');
var tags = {}
for i,tagNode in tagNodeList{
var tag = htmlquery.InnerText(tagNode);
table.push(tags, string.trim(tag));
}
var infoNodeList = htmlquery.Find(node, './/div[@class="m-v-sm info"]/span');
var infos = {};
for i,infoNode in infoNodeList{
var info = htmlquery.InnerText(infoNode);
table.push(infos, string.trim(info));
}
var scoreNode = htmlquery.FindOne(node, './/p[@class="score m-t-md m-b-n-sm"]')
var score = htmlquery.InnerText(scoreNode);
console.log("title: ", title)
console.log("tags: ", string.join(tags," "))
console.log("infos: ", string.join(infos," "))
console.log("score: ", string.trim(score))
console.log()
}
console.pause(true);
输出如图:
网站:https://spa2.scrape.center/
import console;
import crypt;
import kirequests;
import goquery;
import crypt.bin;
io.open()
url = "https://spa2.scrape.center/api/movie/"
var page = 1;
var limit = 10;
var params = {
"limit":limit,
"offset": (page-1)*10
}
var t = tostring(tonumber(time()));
var r = {"/api/movie";tostring((page-1)*limit);t}
var o = crypt.sha1(string.join(r,","),false)
var c = crypt.bin.encodeBase64(string.join({o;t},","))
params["token"] = c
var resp = kirequests.get(url,params)
var datas = resp.json()
console.dump(datas );
console.pause(true);
原文作者:Python成长路;如有侵权,请联系管理员删除。