Scrapy是用纯Python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架
Scrapy使用了Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求
- Scrapy Engine:负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯、信号、数据传递等 (相当于总司令,发号司令)
- Scheduler(调度器):负责接收引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎
- Downloader(下载器):负责下载Scrapy Engine发送的所有Requests请求,并将其获取到的Response交还给Scrapy Engine,由引擎交给Spider来处理
- Spider(爬虫):负责处理所有Responses(默认是交给def parse()这个函数处理的),从中分析提取数据,获取Item字段需要的数据,并将需要跟进URL提交给引擎,再次进入Scheduler(调度器)
- Item Pipeline(管道):负责处理Spider中获取到的Item,并进行后期处理(详细分析、过滤、存储等)的地方
- Downloader Middlewares(下载中间件):可以当做是一个可以自定义扩展下载功能的组件
- Spider Middlewares (Spider中间件):可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Response和从Spider出去的Requests)
注意:只有当调度器中不存在任何request了,整个程序才会停止,也就是说,对于下载失败的URL,Scrapy也会重新下载
制作Scrapy爬虫一共需要4步:
- 新建项目:新建一个新的爬虫项目
- 明确目标(items.py):明确你想要抓取的目标 —— 在items.py文件中定制要爬取的值的键
- 制作爬虫:制作爬虫开始爬取网页
- 存储内容(pipelines.py):设计管道存储爬取内容
创建一个新的项目
scrapy startproject <项目名称>
# 进入到所创建的项目中
# 用genspider创建spider
scrapy genspider <spider名称> <要爬取的域名>
# scrapy genspider quotes quotes.toscrape.com
# tip
# 输入 "scrapy shell 网址" 可以入命令行交互模式哦
执行爬虫文件
scrapy crawl <spider名称>
文件保存
# 保存为csv文件,也可保存为其他格式
scrapy crawl <spider名称> -o <spider名称>.csv
(未完待续~)