前言
本文来自嵩天老师《Python网络爬虫与信息提取》课程中关于Scrapy框架的介绍。这是我认为对Scrapy框架讲得最为通俗易懂、条理清晰的教程。
Scrapy是一个爬虫框架
- 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。
- 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫。
“5+2”结构
5
是指5个模块:SPIDERS, ENGINE, SCHEDULER, DOWNLOADER, ITEM PIPELIINES2
是指2个中间件:spider middleware(位于spiders和engine之间),downloader middleware(位于downloader和engine之间)
3条数据流路径
spiders -> engine -> scheduler(1,2)
:engine从spiders获取了用户的爬取请求(requests,可简单理解为一个url),engine将请求发送给scheduler模块进行调度。scheduler -> engine -> downloader -> engine -> spiders(3,4,5,6)
:engine从schedule获取一个请求(requests,真实的请求),engine通过中间件(downloader middleware)将请求发送给downloader,downloader获得请求后,连接互联网真实的爬取网页,并将爬取的内容封装成对象(response,响应)发送给engine,engine再将响应发送给spiders进行解析。
(总结:这条数据流讲述一个真实的爬取url的请求,经过scheduler,downloader,最终返回的相关内容到达spiders)spiders -> engine -> item pipelines / scheduler(7,8)
:spiders处理响应的内容,得到两个数据类型:scraped item(爬取项)、新的爬取请求(即:我们从网页上获得一个链接之后,如果这个网页中的其他链接也是我们感兴趣的内容,就可以在spiders中增加新的功能,再次进行爬取。),spiders将这两项内容发送给engine,而engine收到之后,将爬取项发送给item pipelines,将requests发送给scheduler。
小结:
- engine控制着各个模块的数据流,不断从schedule获得真实的爬取请求,并发送给downloader进行爬取。
- 整个框架的执行是从spiders向engine发送第一个请求开始,到获得所有链接的内容并将内容处理完放到item pipelines结束。所以框架的入口是spiders,出口是item pipelines。
- engine、downloaders、scheduler是已有实现,无需用户编辑;spiders和item pipelines需要用户自行编写。
5个模块的功能
- Engine(不需要用户修改):
- 控制所有模块之间的数据流
- 根据条件触发事件
- Downloader(不需要用户修改):
- 根据请求下载页面
- Scheduler(不需要用户修改):
- 对所有爬取请求进行调度管理
- Spider(需要用户编写配置代码)
- 解析Downloader返回的响应(Response)
- 产生爬取项(scrapyed item)
- 产生额外的爬取请求(Request)
- Item Pipelines(需要用户编写配置代码)
- 以流水线方式处理Spider产生的爬取项
- 由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
- 可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库。
2个中间件
- Downloader Middleware(用户可编写配置代码)
- 目的:实施Engine、Scheduler和Downloader之间的数据流进行用户可配置的控制
- 功能修改、丢弃、新增请求或响应
- Spider Middleware(用户可编写配置代码)
- 目的:对请求和爬取项的再处理
- 功能:修改、丢弃、新增请求或爬取项
总结
从上述的介绍中,我们可以看出,框架中的五个模块形成了既定的功能,我们重点编写Spiders和Item Pipelines,用户为了操作其中的数据流,可以通过两个中间件,对request、response、item进行操作。
参考:https://www.bilibili.com/video/BV1qs411n79v?p=50