Logo

郎哥编程

请求与响应

2020-12-05 156

请求是Request对象,响应是Responses对象。请求是通过程序访问URL,URL封装在Request对象内,URL所在的服务器接收到URL请求后,会返回与URL相关的内容,返回的内容封装在Responses对象内。

001.png

1、 Request对象

Request对象封装了爬虫要爬取的URL,Request对象被放置在Scrpy调度器内,Scrpy调度器实际上是一个队列管理器,负责管理Request对象的入队与出队。

002.png

equest对象有两个方向入队:一个方向是种子URL,Scrapy引擎会把种子URL封装为Request对象,加入到Request对象队列;一个方向是爬虫程序解析出的URL,爬虫程序会把解析出的URL封装为Request对象,提交给Scrapy引擎,Scrapy引擎将Request对象加入队列。

Request对象的出队来自于Scrapy引擎的请求,Scrapy引擎会向Scrapy调度器发送Request对象出队请求,Scrapy调度器从队列头部获取Request对象提交给Scrapy引擎,并从队列中移除该Request对象。

如何创建一个Request对象?

Request对象是Request类的实例化,Request类提供了Request()构造方法创建一个Request对象,或者说实例化一个Request对象。

构造方法声明如下

class scrapy.http.Request(
    url[, 
    callback, 
    method='GET', 
    headers, 
    body, 
    cookies, 
    meta, 
    encoding='utf-8', 
    priority=0, 
    dont_filter=False, 
    errback])

从构造方法的声明可以看出,Request类的构造方法是在scrapy框架的http模块内定义的,构造方法会返回一个实例化的Request对象。

参数url是请求的URL。

callback是可选参数,该参数是一个回调函数。当Scrapy下载管理器发送Request请求并返回Responses对象后,会调用该回调函数并传入Responses对象。若没有提供该回调函数,Scrapy下载管理器会调用Spider的parse()方法。

method是可选参数,设置HTTP的请求方法,默认是GET请求方式。

headers是可选参数,设置HTTP的请求头,该参数是字典类型的数据,关于HTTP请求头请查阅相关参考资料。

body是可选参数,设置HTTP的请求主体,当请求方式为POST时,用于存储post的参数和参数数据。详细内容请查阅相关参考资料。

cookies是可选参数,设置HTTP的请求cookies,cookies存储了客户端访问服务器的信息。详细内容请查阅相关参考资料。

meta是可选参数,设置HTTP的请求meta,该参数是字典类型的数据,关于HTTP请求meta请查阅相关参考资料。另外,通过设置meta数据,可以在管道类的不同方法中传递额外的数据。

encoding是可选参数,用于设置请求URL及返回内容的编码方式,默认值是utf-8,可以设置其它编码方式。

priority是可选参数,默认值是0,用于设置Request对象的优先级,Scrapy调度器会根据Request对象的优先级调整队列顺序。该参数的数值越大,优先级越高。

dont_filter是可选参数,用于设置Scrapy调度器对Request对象的去重,若多个Request对象的URL地址相同,Scrapy调度器会过滤重复的Request对象。dont_filter默认值是False,允许Scrapy调度器过滤重复的Request对象。若设置为True,该Request对象不参与Scrapy调度器的过滤。

errback是可选参数,该参数是一个回调函数,该函数处理请求发生的异常。当执行Request请求发生异常时(如404 HTTP等异常),该函数被调用,并传入Responses实例Twisted Failure实例对象。

2、 Response对象

Response对象封装了Request请求返回的内容。Scrapy下载管理器会把对应Request请求下载的内容封装到Response对象,并调用Request对象设置的回调函数,Response对象作为回调函数传入的实参。若Request对象没有设置回调函数,Scrapy下载管理器会调用Spider默认的parse()方法,来解析下载的网页内容。

Response对象是Response类的实例化,Response类下有TextResponse 、 HtmlResponse 、XmlResponse子类。

003.png

Response对象是由Scrapy下载管理器实例化的,一般不需要程序对其实例化。下面主要介绍Response类及其子类的属性和方法,这些属性和方法对解析下载的网页内容是非常必要的。

Response类

Response类是TextResponse 、 HtmlResponse 、XmlResponse类的基类。

Response类的主要属性如下表所示:

004.png

TextResponse类

TextResponse继承于Response类,用于处理文本和bytes数据,如文本文件、图像、音视频等内容。

TextResponse类的主要属性如下表所示:

005.png

TextResponse类的主要方法如下表所示:

006.png

HtmlResponse类

HtmlResponse类是TextResponse类的子类,HtmlResponse类根据返回的网页内容中的http-equiv,来确定网页内容采用的字符集,然后将网页内容转换为unicode编码。

HtmlResponse类的主要方法如下表所示:

007.png

XmlResponse类

XmlResponse类是TextResponse类的子类,HtmlResponse类根据返回的XML内容的声明行,来确定XML采用的字符集,然后将XML内容转换为unicode编码。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论