爬虫 之 Scrapy

一、Scrapy简介

Scrapy 是一种快速的高级web crawling和web scrapying框架,用于对网站进行爬网并从其页面提取结构化数据。它可以用于广泛的用途,从数据挖掘到监控和自动化测试。

框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。

Scrapy 使用了 Twisted'twɪstɪd异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

二、Scrapy架构

bVco7P

Scrapy Engine(引擎): 负责Spider、Item Pipeline、Downloader、Scheduler中间的通讯,信号、数据传递等,并在相应动作发生时触发事件。 此组件相当于爬虫的“大脑”,是 整个爬虫的调度中心。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。(调度器会自动去掉重复的url)

Downloader(下载器):负责下载Scrapy Engine发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine,由引擎交给Spider来处理。

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给Scrapy Engine,再次进入Scheduler。

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。当页面被爬虫解析所需的数据存入Item后,将被发送到Pipeline,并设置好次序。

Downloader Middlewares(下载中间件):是在引擎和下载器之间的特定钩子(specific hook),处理它们之间的请求(request)和响应(response)。提供了一个简单的机制,通过插入自定义代码来扩展Scrapy功能。通过设置Downloader Middlewares来实现爬虫自动更换user-agent,IP等。你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):是在引擎和Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items或requests)。提供了同样简单机制,通过插入自定义代码来扩展Scrapy功能。你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

扫描二维码关注公众号,回复: 10321846 查看本文章

Scrapy数据流:

1.ScrapyEngine打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个(批)要爬取的url(s);

2.ScrapyEngine向调度器请求第一个要爬取的url,并加入到Schedule作为请求以备调度;

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

4.Schedule返回下一个要爬取的url给ScrapyEngine,ScrapyEngine通过DownloaderMiddlewares将url转发给Downloader;

5.页面下载完毕,Downloader生成一个页面的Response,通过DownloaderMiddlewares发送给ScrapyEngine;

6.ScrapyEngine从Downloader中接收到Response,通过SpiderMiddlewares发送给Spider处理;

7.Spider处理Response并返回提取到的Item以及新的Request给ScrapyEngine;

8.ScrapyEngine将Spider返回的Item交给ItemPipeline,将Spider返回的Request交给Schedule进行从第二步开始的重复操作,直到调度器中没有待处理的Request,ScrapyEngine关闭。

可以简化为以下过程:

1.引擎从调度器中取出一个链接(url)用于接下来的抓取;

2.引擎把URL封装成一个请求(Request)传给下载器;

3.下载器把资源下载下来,并封装成应答包(Response);

4.爬虫(spider)解析Response;

5.解析出实体(Item),则交给实体管道进行进一步的处理;

6.解析出的是链接(url),则把URL交给调度器等待抓取。

发布了191 篇原创文章 · 获赞 204 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Aibiabcheng/article/details/105126825