《精通Scrapy网络爬虫》第二章

Scrapy框架结构及工作原理



Scrapy框架中的各个组件:

组件描述类型
ENDINE引擎,框架的核心,其他所有组件在其控制下协同工作内部组件
SCHEDULER调度器,负责对SPIDER提交的下载请求进行调度内部组件
DOWNLOADER下载器,负责下载页面(发送HTTP请求/接收HTTP响应)内部组件
SPIDER爬虫,负责提取页面中的数据,并产生对新页面的下载请求用户实现
MIDDLEWARE中间件,负责对Request和Response对象进行处理可选组件
ITEM PIPELINE数据管道,负责对爬取到的数据进行处理可选组件

对用户来说,Spider是最核心的组件,Scrapy爬虫开发是围绕实现Spider展开的。
在框架中的数据流,有如下三种对象:

对象描述
REQUESTScrapy中的HTTP请求对象
RESPONSEScrapy中的HTTP响应对象
ITEM从页面中爬取的一项数据

以上几种对象在框架中的流动过程

  • SPIDER要爬取某URL地址的页面时,需使用该URL构造一个Request对象,提交给ENGINE
  • Request对象随后进入SCHEDULER中排队,之后的某个时刻出队,送往DOWNLOADER
  • DOWNLOADER根据Request对象中的URL地址发送一次HTTP请求到网站服务器,之后用服务器返回的HTTP响应构造出一个Response对象,其中包含页面的HTML文本
  • Response对象最终会被递送给SPIDER的页面解析函数进行处理,页面解析函数从页面中提取数据,封装成Item后提交给ENGINEItem之后被送往ITEM PIPELINES进行处理,最终可能被EXPORTER以某种数据格式写入文件;另一方面,,页面解析函数还从页面中提取链接(URL),构造出新的Request对象提交给ENGINE

如果把框架中的组件比作人体的各个器官,RequestResponse对象便是血液,Item则是代谢产物

Request和Response对象


Request对象

Request(url[,callback,method='GET',headers,body,cookies,meta,encoding='utf-8',priority=0,dont_filter=False,errback])
参数的含义:

  • url(必选):请求页面的url地址,bytesstr类型
  • callback:页面解析函数,默认为Scrapyparse方法
  • methodHTTP请求的方法,默认为‘GET
  • headersHTTP请求的头部字典,dict类型。如果某项值为None,则不发送该项HTTP头部
  • bodyHTTP请求的正文,bytesstr类型
  • cookiesCookie信息字典,dict类型
  • metaRequest的元数据字典,dict类型,用于给框架中其他组件传递信息
  • encoding:默认编码‘utf-8
  • priority:请求的优先级默认值为0
  • dont_filter:默认为False,对同一个url地址多次请求下载要求,后面的请求会被去重过滤器过滤
  • errback:请求出现异常或者出现HTTP请求时的回调函数

上述蓝色属性为常用属性

Response对象

Response为一个基类,它有如下子类,这三个子类差别不大:

  • TextResponse
    • HTMLResponse
    • XmlResponse

HTMLResponse对象的属性及方法:

  • url:请求页面的url地址,bytesstr类型
  • status:状态码,int类型
  • headersHTTP请求的头部字典,类字典类型。
  • bodyHTTP响应正文,bytes类型
  • text:文本形式的HTTP响应正文,str类型
  • encoding
  • request:产生该HTTP响应的Request对象
  • meta:即Response.request.meta
  • selectorSelector对象用于在Rexponse中提取数据
  • xpath(query):提取数据
  • css(query):提取数据
  • urljoin(url):构造绝对url

Spider开发流程


  • 继承scrapy.Spider
  • Spider取名
  • 设定起始爬取点
  • 实现页面解析函数

为爬虫设定起始爬取点的两种方式:

  • 定义start_urls属性
  • 实现start_requests方法
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值