使用scrapy搭建大型爬虫系统
最近新项目准备启动,在开始前内容、词库这些都需要提前做好准备,所以就有了这篇文章。
在开始动手,看了下行业核心词排在首页的站,发现内容都多得不要不要的,各种乱七八糟的频道、页面模板,心想,如果每个网站、每套页面都写一套采集模板的话,那简直要累死。
所以,这次,玩点不一样的。
首先,根据需求,采集一个行业的文章内容,可以拆分为两个模块:
- 爬虫系统:主要负责在浩瀚的互联网上,找到有内容价值的页面并且把页面抓取回来。涉及到URL去重、爬虫策略深度、广度一些杂事。
- 内容处理系统:主要负责处理爬虫抓回来的内容,并从里面提取出内容。
正文提取
以前在用印象笔记的时候,自带的一些小插件就很好用,只需要在浏览器上点一个按钮,就会自动提取出当前网页的正方,并且保存到笔记库里面。
在网上找了下,发现已经有很多现成的解决方案了,而且解决的方案/算法也很有意思。就是基于DOM树来处理的。
凡是DOM节点 name 或ID带有article、content、body的,加权重值。
DOM节点name或ID带有foot、comment、menu……的,降权。
经过一轮遍历后,把得分最高的节点提取出来,作为页面正文所在的节点。
算法参考:python-readability
测试了下,识别率还是挺高的,80%以上的成功率应该有。
提取正文效果
抓取系统
爬虫制作上面,选择了一直以来,用的比较顺手的scrapy做框架,代码如下:
代码有木有非常简单(滑稽),种子页面是从百度搜索结果页开始的,为了减少网络请求次数,把百度结果页的网站数量从默认的10个,改成了50,同时使用了无广告版的百度,URL是没有经过加密的。
到这里,基本上一个简单的行业内容采集爬虫就完成了,随意测试了下scrapy的速度,发现在我的 I5机器上,每分钟可以抓3356个页面,这还只是单机单进程,鹅妹子嘤~~
参考资料:
如何实现有道云笔记的网页正文抓取功能?
擅长爬虫、SEO、文本分类领域,交流微信 :z328134421