Scrapy是一个基于Twisted的异步处理框架。
engine(已封装)
- 控制所有模块之间的数据流 ,request、response、item
- 根据条件触发事件
downloader(已封装)
- 接收request,返回response
scheduler(已封装)
- 接收从engine传来的request,再根据engine需要返回request
spiders(对应spiders文件夹下的spider.py)
- 需要用户编写代码
- 解析downloader返回的response
- 返回item给items.py,新request给scheduler
- 对于简单的数据操作可以直接返回
item pipelines(对应items.py,pipelines.py)
- 需要用户编写配置代码
- 在items.py中定义item,在pipelines.py中处理item(清洗,入库)
- 每个操作要定义创建一个Papeline类,在setting.py的ITEM_PIPELINES中设置顺序,数值小的优先
spider middleware(对应middlewares.py)
- 用户可以编写配置代码
- 目的:对请求和爬取项的再处理
- 功能:修改、丢弃、新增请求或爬取项
downloader middleware(对应middlewares.py)
- 用户可以编写配置代码
- 目的:实施engine,scheduler,downloader之间进行用户可配置的控制
- 功能:修改、丢弃、新增请求或响应
常用命令
scrapy startproject dirname
scrapy genspider spidername domain
scrapy crawl spidername
scrapy shell url
scrapy settings options
scrapy list
数据类型
Request类
class scrapy.http.Request() ,Request对象表示一个HTTP请求,由spider产生,由downloader执行
- .url Request请求对应的URl地址
- .method 对应的请求方法,‘GRT’,‘POST’等
- .headers 字典类型风格的请求头
- .body 请求内容主体,字符串类型
- .meta 用户添加的扩展信息,在scrapy内部模块间传递信息使用
- .copy() 复制该请求
Response类
class scrapy.http.Response(),Response对象表示一个HTTP响应,由downloader生产,由spider处理
- .url Response对应URL地址
- .status HTTP状态码,默认是200
- .headers Response对应的头部信息
- .body Response对应的内容信息,字符串类型
- .flags 一组标记
- .request 产生Response类型对应的Request对象
- .copy() 复制该响应
Item类
class scrapy.item.Item()
- Item对象表示一个从HTML页面中提取的信息内容
- 由spider产生,由item pipeline处理
- 类似字典类型,可以按字典类型操作