Scrapy框架介绍
1.什么是网络爬虫
网络爬虫是根据特定的规则在网络上自动爬取所需信息的脚本或程序,分为通用爬虫和聚焦爬虫,传统的通用网络爬虫主要为门户站点搜索引擎和大型Web服务提供商采集数据,例如,我们常见的Yahoo,Google,百度等搜索引擎;通用网络爬虫在面对不同背景、不同知识领域的用户检索需求时,返回的结果中往往包含了大量用户并不是真正关心的网页及信息;各种数据载体和各种不同的数据形式大量出现。对于信息内容密集、结构确定的数据体系,搜索引擎难以捕获。为了解决此类问题,以聚焦爬虫为基础的网络爬虫就可以很好的解决。
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODkyNDUwMA_size_16_color_FFFFFF_t_70][]
2.Scrapy框架介绍
Scrapy是Python中一个为了爬取网站数据、提取结构化数据的爬虫应用框架。Scrapy框架分为分为7个部分,引擎(Engine)
、调度器(Scheduler)
、下载器(Downloader)
、Spider
、管道(Item Pipeline)
、下载中间件
、中间件(Middlewares)
。
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODkyNDUwMA_size_16_color_FFFFFF_t_70 1][]
- Engine引擎,框架的核心,其他组件在其控制下工作 内部组件;是用来控制整个爬虫系统的数据处理流程,并进行不同事务触发。
- Schendul 调度器,负责对spider提交的下载请求进行调度 内部组件;维护着待爬取的URL队列,当调度程序从Scrapy Engine接受到请求时,会从待爬取的URL队列中取出下一个URL返还给他们。
- Downloader 下载器 ,下载页面(request response) 内部组价;从Scrapy Engine那里得到需要下载的URL,并向该网址发送网络请求进行页面网页,最后再将网页内容传递到Spiders来处理。如果需要定制更复杂的网络请求,可以通过Downloader中间件来实现,
- Spider 提取页面中的数据 产生对新页面的下载请求 用户实现;是用户需要编辑的代码的部分。用户通过编写spider.py这个类实现指定要爬取的网站地址、定义网址过滤规则、解析目标数据等。 Spider发出请求,并处理Scrapy Engine返回给它下载器响应数据,把解析到的数据以item的形式传递给Item Pipeline,把解析到的链接传递给Scheduler。
- Middleware 中间件,负责对request response对象进行处理 可选组价;是位于Scrapy Engine和Downloader之间的钩子框架,主要是处理Scrapy Engine与Downloader之间的请求及响应。可以代替接收请求、处理数据的下载以及将结果响应给Scrapy Engine。
- Item pipeline 数据管道 ,对爬去的数据进行处理;Item 定义了爬虫要抓取的数据的字段,类似于关系型数据库中表的字段名,用户编写item.py文件来实现这一功能。Pipeline主要负责处理Spider从网页中抽取的item,对item进行清洗、验证,并且将数据持久化,如将数据存入数据库或者文件。用户编写pipeline.py实现这一功能。
Scrapy官方文档:https://doc.scrapy.org/en/latest/(大家可以查看官方文档,可以对Scrap有更加详细的了解,会有每个功能键的介绍和使用,非常方便)
3.scrapy工作流程
首先从初始 URL 开始,Scheduler 会将其交给 Downloader,Downloader向网络服务器发送服务请求进行下载,得到响应后将下载的数据交给Spider,Spider会对网页进行分析,分析出来的结果有两种:一种是需要进一步抓取的链接,这些链接会被传回 Scheduler;另一种是需要保存的数据,它们则被送到 Item Pipeline,Item会定义数据格式, 最后由Pipeline对数据进行清洗、去重等处理后存储到文件或数据库。
Scrapy数据流是由执行的核心引擎(engine)控制,流程是这样的: 1.
- 引擎打开一个域名,蜘蛛处理这个域名,并让蜘蛛获取第一个爬取的URL。
- 引擎从蜘蛛那获取第一个需要爬取的URL,然后作为请求在调度中进行调度。
- 引擎从调度那获取接下来进行爬取的页面。
- 调度将下一个爬取的URL返回给引擎,引擎将他们通过下载中间件发送到下载器。
- 当网页被下载器下载完成以后,响应内容通过下载中间件被发送到引擎。
- 引擎收到下载器的响应并将它通过蜘蛛中间件发送到蜘蛛进行处理。
- 蜘蛛处理响应并返回爬取到的item,然后给引擎发送新的请求。
- 引擎发送处理后的item到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。
- 系统重复2-9的操作,直到调度中没有请求,然后断开引擎与域之间的联系。
部分介绍来自转载//www.jianshu.com/p/a5c06322b025
还没有评论,来说两句吧...