Scrapy 框架
一、简介
是一个基于Twsited 的异步处理框架,是纯 Python 实现的爬虫框架
1.特点
结构清晰、模块之间的耦合度低、可拓展性极强
2.架构介绍
- 爬虫引擎(engine):
处理整个系统的数据流处理、触发事务,是整个框架的核心
- Item:
定义了爬取结果的数据结构,爬取的数据会被赋值成为该 Item 对象
- 调度器(Scheduler):
调度接收来自引擎的请求并将其放入队列中,并通过事件返回给引擎
- 下载器(Downloader):
下载页面内容,并将页面返回给spider
- 爬虫(Spider):
定义了爬取的逻辑与解析规则,它主要负责解析响应并提取结果,发起新的请求
- 项目管道(item pipeline)
负责处理爬虫解析后的项目,主要清洗、验证、数据持久化
- 下载中间件(Downloader MiddleWare)
位于引擎与下载器之间的钩子框架,主要处理引擎与下载器之间的请求与响应
- 爬虫中间件(Spider MiddleWare)
位于引擎与下载器之间的钩子框架了,主要处理爬虫输入响应和输出结果以及新的请求
3.数据流
核心:是由核心引擎控制,流程如下
1. engine 首先打开一个网站,找到处理该网站的Spider,并向该 Spider 请求第一个要爬取的URL
2. engine 从Spider中获取到第一个要爬取的URL,并通过Scheduler以Request的形式调度
3. engine 从Scheduler 请求下一个要爬取的URL
4. Scheduler返回下一个要爬取的URL给engine,engine将URL通过Downloader Middleware 转发给Downloader下载
5. 一旦页面下载完毕,Downloader生成该页面的Response,并通过Downloader Middleware 转发给engine
6. engine 从Downloader 中接收到response,并通过Spider Middleware 转发给Spider处理
7. Spider处理Response,并返回抓取到的Item 及新的Request 给 Engine
8. Engine 将Spider返回的Item给Item Pipeline,将新的Request 给Engine
9. 重复2-8的步骤,直到Scheduler 没有更多的Request,Engine关闭网站,爬取结束
4.项目结构
scrapy.cfg:
项目的配置信息,主要为Scrapy 命令行工具提供一个基础的配置信息,包括了项目的配置文件路径、部署相关的信息等等
items.py :
设置数据存储模板,用于结构化数据
pipelines:
经过几个特定的次序处理数据清洗、验证、数据、持久化
settings.py :
项目全局配置
middleware :
Downloader Middleware 与 Spider Middleware 的实现
Spiders :
爬虫目录,包含了一个个Spider的实现,每个Spider都有一个文件
二、Scrapy框架的安装
1.pip 安装
pip install scrapy
windows报错的话
pip install pywin32
2.验证安装
输入 scrapy
三、Scrapy 框架入门
1.创建项目
scrapy startproject JobboleSpider
2.创建Spider
cd JobbloeSpider
scrapy genspider jobbole blog.jobbloe.com
注:三个属性,name allowed_domains start_urls 还有一个parse() 方法
3.创建Item
Item 是保存爬取数据的容器,使用方法与字典相似,多了额外的保护机制
4.解析Response
parse() 默认处理 start_urls
获取所有结果的列表 extract() 获取第一个用 extract_first()
使用命令, 进入Scrapy.cfg 运行一下命令
scrapy crawl jobbole
命令需要一个参数,即爬虫的名称
5.使用Item
可以理解为一个字典,在声明时需要实例化
6.后续request
通过下一页链接构造请求,主要用到 scrapy.Request 传递两个参数
url : 请求链接
callback : 他是回调函数。 回调函数进行解析或生成下一个请求
7.运行
scrapy crawl jobbole
保存为json 文件
scrapy crawl jobbole -o jobbole.json
8.使用 Item pipeline
常用的数据如下:
清理HTML数据
验证爬取的数据(检查Item 包含某些字段)
查重(并丢弃)
将爬取的结果保存到数据库中
调用process_item() 方法必须返回一个包含数据的字典或是Item对象,或者抛出DropItem异常
MongoPipeline 类实现了 API 定义的另外几个方法
from_crawler: 他是一个类方法,用@classmethod 标识,是一种依赖注入的方式
open_spider: 当Spider开启时,这个方法被调用,上文程序主要进行了一些初始化操作
close_spider:当Spider关闭时,这个方法被调用,上文程序关闭数据库链接
process_item: 主要的处理方法,上文程序执行数据插入操作
定义好 MongoPipeline 与 DropItemPipeline 后需在 settings.py中启用他们
DOWNLOAD_DELAY = 2
ITEM_PIPELINES= {
'JobboleSpider.pipelines.DropItemPipeline':300,
'JobboleSpider.pipelines.MongoPipeline':400
}
MONGO_URI = 'localhost'
MONGO_DATABASE = 'jobbole'
重新执行爬取
scrapy crawl jobbole
三、Selector的用法
1.直接使用
2.scrapy shell
3.xpath
四、Spider的用法
1.Spider 运行流程
2.Spider 类分析
五、Downloader Middleware 的用法
1.process_request(request,spider)
2.process_response()
3.process_exception(request,exception,spider)
六、scrapy 爬取知乎用户