了解Scrapy框架常用组件
- ENGINE:引擎,框架核心,协同各个组件
- SCHEDULER:调度器,调度SPIDER提交的下载请求,按某种算法使Request对象排队
- DOWNLOADER:下载器,负责下载页面(发送HTTP Request/接收 HTTP Response)
- SPIDER:爬虫,用户实现,实现爬虫逻辑
- MIDDLEWARE(可选):负责对Request和Response进行处理
- ITEM PIPELINE(可选):数据管道,负责对爬取到的数据进行处理
实现SPIDER
- 继承scrapy.Spider
- 给Spider起名
- 自定义
start_requests
方法(可省略) - 设置起始爬取点
- 实现页面解析函数
Request和Response对象
Requset对象
1 | # Request源码 |
解析构造器参数:
url
(必选)请求页面的url地址,bytes或str类型
callback
(常用)页面解析函数,默认调用Spider的parse方法
method
HTTP请求方法,默认为GET
headers
HTTP请求的头部字典,如果其中某项值为None,则表示不发送该项HTTP头部
body
HTTP请求正文
cookies
Cookie信息字典
meta
Request的元数据字典,用于给框架中其他组件传递信息
encoding
编码类型,默认
'UTF-8'
priority
请求的优先级,默认为0,优先级高的优先下载
dont_filter
默认为
False
,表示对与同一个URL的多次提交下载请求,后面的请求会被过滤掉(避免重复下载) 设置为True
,则表示强制执行所有下载请求errback
请求出现异常或者出现HTTP错误时(如404)的回调函数
flags
是一个包含属性初始值的
Response.flags
列表,如果给定,列表将被浅复制。
Response对象
最常用的三个方法:
xpath(query)
使用XPath选择器在Response中提取数据
css(query)
使用CSS选择器在Response中提取数据
urljoin(url)
用于构造绝对URL,例如:
1 | response.url = www.example.com/a |
页面解析函数
默认为parse
方法
页面解析需要完成的工作:
- 使用选择器提取页面数据,将其封装成item或字典提交给引擎
- 使用选择器或LinkExtractor提取页面中的链接,用其构造成新的Request对象并提交给引擎
页面解析函数被要求返回一个可迭代对象(一般为生成器函数),每次迭代返回一项数据或一个Requset对象