Scrapy爬虫框架10分钟快速入
作者:wedo实验君来源:Python中文社区1.scrapy简介scrapy是基于事件驱动的Twisted框架下用纯python写的爬虫框架。很早之前就开始用scrapy来爬取网络上的图片和文本信息,一直没有把细节记录下来。这段时间,因为工作需要又重拾scrapy爬虫,本文和大家分享下,包你一用就会,欢迎交流。1.1scrapy框架scrapy框架包括5个主要的组件和2个中间件Hook。ENGIINE:整个框架的控制中心,控制整个爬虫的流程。根据不同的条件添加不同的事件(就是用的Twisted)SCHEDULER:事件调度器DOWNLOADER:接收爬虫请求,从网上下载数据SPIDERS:发起爬虫请求,并解析DOWNLOADER返回的网页内容,同时和数据持久化进行交互,需要开发者编写ITEMPIPELINES:接收SPIDERS解析的结构化的字段,进行持久化等操作,需要开发者编写MIDDLEWARES:ENGIINE和SPIDERS,ENGIINE和DOWNLOADER之间一些额外的操作,hook的方式提供给开发者从上可知,我们只要实现SPIDERS(要爬什么网站,怎么解析)和ITEMPIPELINES(如何处理解析后的内容)就可以了。其他的都是有框架帮你完成了。(图片来自网络,如果侵权联系必删)1.2scrapy数据流我们再详细看下组件之间的数据流,会更清楚框架的内部运作。(图片来自网络,如果侵权联系必删)SPIDERS发爬虫请求给ENGIINE,告诉它任务来了ENGIINE将请求添加到SCHEDULER调度队列里,说任务就交给你了,给我安排好SCHEDULER看看手里的爬取请求很多,挑一个给ENGIINE,说大哥帮忙转发给下载DOWNLOADERENGIINE:好的,DOWNLOADER你的任务来了DOWNLOADER:开始下载了,下载好了,任务结果交给ENGIINEENGIINE将结果给SPIDERS,你的一个请求下载好了,快去解析吧SPIDERS:好的,解析产生了结果字段。又给SPIDERS转发给ITEMPIPELINESITEMPIPELINES:接收到字段内容,保存起来。第1步到第8步,一个请求终于完成了。是不是觉得很多余?ENGIINE夹在中间当传话筒,能不能直接跳过?可以考虑跳过了会怎么样。这里分析一下SCHEDULER的作用:任务调度,控制任务的并发,防止机器处理不过来ENGIINE:就是基于Twisted框架,当事件来(比如转发请求)的时候,通过回调的方式来执行对应的事件。我觉得ENGIINE让所有操作变的统一,都是按照事件的方式来组织其他组件,其他组件以低耦合的方式运作;对于一种框架来说,无疑是必备的。2.基础:XPath写爬虫最重要的是解析网页的内容,这个部分就介绍下通过XPath来解析网页,提取内容。2.1HTML节点和属性(图片来自网络,如果侵权联系必删)2.2解析语法a/b:‘/’在xpath里表示层级关系,左边的a是父节点,右边的b是子节点a//b:表示a下所有b,直接或者间接的[]:选择具有某个属性的节点//div[classs],//a[x]:选择具有class属性的div节点、选择具有x属性的a节点//div[class="container"]:选择具有class属性的值为container的div节点//a[contains(id,"abc")]:选择id属性里有abc的a标签一个例子 response.xpath(//div[ class="taglist"]/ul//li//a//img/data-original).get_all()#获取所有class属性(css)为taglist的div,下一个层ul下的所有li下所有a下所有img标签下data-original属性#data-original这里放的是图片的url地址更多详见 |
转载请注明地址:http://www.tanhuaa.com/ncth/7853.html
- 上一篇文章: 华为H3C锐捷交换机配置命令整理合集
- 下一篇文章: 利用conda管理R包