scrapy 不是一个爬虫函数功能库,而是一个爬虫框架
那么爬虫框架是什么呢?
爬虫框架是个半成品,能够帮助用户实现专用网络爬虫,是实现爬虫功能的一个软件结构和功能组件,像是一个使用模板,约束稍小。
以下为Scrapy的"5+2"结构
有三条主要的数据流
1.spiders--->Engine---->Scheduler
其中Spider获取用户请求并通过Engine传递给Scheduler,而Scheduler负责对爬取请求进行调度
2.Scheduler---->Engine---->Downloader---->Engine----->Spiders
其中Engine从Scheduler获取下一个要爬取的请求,Engine获取到请求又通过中间件发送到Downloader模块,Downloader拿到请求就与互联网链接并爬取到相关网页,再将爬取的内容形成对象(Responses),再通过中间件Engine发送给Spiders
3.Spiders---->Engines------>Item Pipelines或到达Scheduler模块
Spiders获取响应(Response)之后产生两个爬取的相关类型一个是爬取项(Item),另一个是新的爬取请求(Requests)对应的将Item项发送给Item Pipelines模块,将Requests发送给Schedulers进行相关调度
从数据流的过程我们可以发现,这个框架的出口是Item Pipelines 而入口是Spiders,而在5+2的结构中ENGINE,DOWNLOADER,SCHEDULER都是已有实现,我们并不需要去编写他们
我们只需要编写这个出口和入口,也就是ITEM PIPELINES(负责对提取的信息进行后续处理)与 SPIDERS(用来为整个框架去提供要爬取的链接,同时解析要获得的内容)
之后来看一下各个部分的功能
Engine:控制所有模块之间的数据流,并根据条件触发事件
Downloader :根据请求下载网页,不需要用户修改
Scheduler:对所有爬取请求进行调度管理,不需要用户修改
Downloader MIddleware 目的:实施Engine,Scheduler和Downloader之间进行用户可配置的控制。功能:修改,丢弃,新增请求或响应。可编写配置代码
Spiders 解析Downloader返回的响应(Response),产生爬取项(scraped item),产生额外的爬取请求(Request)
Item Pipeline 处理产生的信息,由一组操作顺序组成,类似流水线,需要用户配置
Spider Middleware 通过对修改,丢弃,新增对请求和爬取项的处理
Scrapy的常用命令
命令 | 说明 | 格式 |
startproject | 常见一个新工程 | scrapy startproject<name>[dir] |
genspider | 创建一个爬虫 | scrapy genspider[options]<name><domain> |
settings | 获取爬虫配置信息 | scrapy settings [options] |
crawl | 运行一个爬虫 | scrapy crawl <spider> |
list | 列出工程中所有爬虫 | scrapy list |
shell | 启动url调试命令行 | scrapy shell [url] |
生成器非常重要,yield可以将结果逐个返回