本来是公司有在结合自己的业务场景和产品架构做漏扫,漏扫里必然就涉及到资产收集,那就离不开爬虫。公司的项目本来用的是pyppeteer,依托google的chromium来做模拟浏览器访问url。后面发现微软做了一个和puppeteer一毛一样的东西,就是playwright,这个代码就是基于playwright来重新写的一套逻辑,利用gevent来做协程管理。
a. 现在用协程去做,协程的优点在于针对io密集型的操作,可以在一个线程里并行执行这些 io操作,然后等待所有io结束,进行后续逻辑,没有多线程之间上下文切换带来的性能损耗。但是,现有的代码里涉及一定的计算,如计算md5等,需要消耗cpu资源,所以协程并不能有效优化速度。后续还是考虑多进程的方式,充分利用多核,牺牲一部分性能,提高url爬取的并发率。
b. url的去重逻辑相对做的比较基础,然后用布隆过滤器做的爬取过的url不再爬取逻辑,这块后面可以看下怎么优化。
c. 目前还是只能单节点跑,如果考虑一个任务很多url,甚至是一个url爬取到的url集合,来做异步爬取,可能需要做较大改动,尤其是已爬取的url识别。
d. 路径爆破。