python爬虫Python 爬虫 web 数据分析 机器学习 人工智能

【小白学爬虫连载(9)】--scrapy构架设计分析

2018-05-26  本文已影响5人  哈希大数据

欢迎大家关注公众号【哈希大数据】
前面已经分享了利用scrapy框架抓取百度新闻数据。不过相信大家应该还不清楚scrapy究竟是如何运行的,它是如何实现数据的下载、如何简洁的实现爬取下一页,带着这些疑问咱们来看看scrapy的架构是如何设计的。

1.Scrapy架构图

image

从图中可以看出scrapy主要由5个模块、2个中间件组成。下面详细介绍各模块和中间件的主要作用。

以上模块中需要我们修改的主要有三个,分别是Spiders解析网页,Pipeline对爬取数据进行预处理,Downloader Middlewares进行User-Agent和cookies等的设置。

2.Scrapy中的运行流程

  1. 引擎打开一个网站(open a domain),找到处理该网站的spider,并向该spider请求第一个要爬取的url(s);

  2. 引擎从spider中获取到第一个要爬取的url并在调度器(scheduler)以requests调度;

  3. 引擎向调度器请求下一个要爬取的url;

  4. 调度器返回下一个要爬取的url给引擎,引擎将url通过下载器中间件(请求requests方向)转发给下载器(Downloader);

  5. 一旦页面下载完毕,下载器生成一个该页面的responses,并将其通过下载器中间件(返回responses方向)发送给引擎;

  6. 引擎从下载器中接收到responses并通过spider中间件(输入方向)发送给spider处理;

  7. spider处理responses并返回爬取到的Item及(跟进的)新的resquests给引擎;

  8. 引擎将(spider返回的)爬取到的Item给Item Pipeline,将(spider返回的)requests给调度器;

  9. (从第二部)重复直到(调度器中没有更多的request)引擎关闭该网站;

3.Scrapy中的数据流分析

图中绿线是数据流向,主要为请求request、响应response、解析完成的数据items。首先从初始 URL 开始,Scheduler 会将其交给 Downloader 进行下载,下载之后会交给 Spider 进行分析,Spider 分析出来的数据有两种:一种是需要进一步抓取的链接,例如之前分析的“下一页”的链接,这些东西会被传回 Scheduler ;另一种是需要保存的数据,它们则被送到 Item Pipeline 那里,那是对数据进行后期处理(详细分析、过滤、存储等)的地方。另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。

小结

本次主要分享scrapy的架构设计,了解其设计核心有助于设计基于scrapy框架的、符合自身需求的爬虫,scrapy主要有五个模块、两个中间件需要我们修改的主要只有三个,分别是Spiders解析网页,Pipeline对爬取数据进行预处理,Downloader Middlewares进行User-Agent和cookies等的设置。使用框架可以较为容易的解决cookie、retry、频率限制、多线程等问题。

上一篇下一篇

猜你喜欢

热点阅读