通用的爬虫系统


Author: yifei / Created: Aug. 15, 2017, 4:58 a.m. / Modified: Aug. 15, 2017, 12:58 p.m. / Edit

一个通用爬虫系统 spider run

组件

抽取

从网页中根据指定的规则抽取出对应的内容, 规则可以使xpath, 或者正则表达式, 或者是训练好的模型, 或者是使用json或者yaml来表达以上规则的复合规则.

下载

下载需要控制封禁, 比如对一个站点的频次控制

几种运行模式

命令行模式

这种模式只考虑小规模的数据抓取,所有的队列和集合都是用python内置的对象,放在本机内存中。存储结果也放在本地的json文件中,抓取结束后一次性的dump出所有结果。

在线模式

这种模式适合大规模的抓取,不直接从命令行执行,而是从任务调度队列取事件,再去抓取

一些问题

搜索引擎级的爬虫都会遇到那些问题?如何处理越来越多的webapp

hub 和 detail 两种页面不应该严格区分,而是作为每一个页面的两个属性

垂直抓取结果数据库的设计   网页上的链接分两种类型:button和anchor。 button在同一个页面内,window不会消失;anchor会加载新的页面   一个页面内抓取的是列表还是单个数据。值的列表如何重组为对象的列表。如果乳量不宜,对应就丢了,很棘手。   如果用url做主键也有问题,url可能是不更新的,而页面内容在更新

提高抓取效率

  1. 使用自己的dns是一个提高速度的很好方法 2. 使用bloomfilter [1] 3. 如果可能的话,可以使用google、bing、baidu a.去发现站点的新连接 b. 获取meta信息 c. 直接抓取google的缓存 4. auto-throttle algorithm 5. 使用你的用户作为出口节点 6. 抓取并使用所有有外网访问权限的web服务作为节点 7. 反向生成站点模板[3],这方面参考wenhao维护的群体特征服务    

爬虫的意义

  竞品监控,对于竞争对手,监控对方的数据;对于潜在收购对象,监控对方数据是否真实   在这其中,数据的可视化非常重要。[4]     参考:   [1] http://www.cnblogs.com/coser/archive/2012/03/16/2402389.html [2] http://www.zhihu.com/question/24326030/answer/71813450 [3] http://www.cnblogs.com/jexus/p/5471665.html [4] https://www.zhihu.com/question/27621722


评论区