You are here:  Home » Python » 爬虫蜘蛛采集请求和回应Request和Response之响应对象scrapy.Response(34)python SCRAPY最新教程1.51以上版本

响应对象

classscrapy.http.Responseurl [status = 200headers = Nonebody = b”flags = Nonerequest = None ]
Response对象表示的HTTP响应,这通常是下载(由下载器)并馈送到蜘蛛进行处理。

参数:
  • url字符串) – 此响应的URL
  • status整数) – 响应的HTTP状态。默认为200
  • headersdict) – 此响应的标头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)。
  • body字节) – 响应主体。要将解码后的文本作为str(Python 2中的unicode)访问,您可以使用response.text来自编码感知的 Response子类,例如TextResponse
  • flags列表) – 是包含Response.flags属性初始值的列表 。如果给定,列表将被浅层复制。
  • requestRequestobject) – Response.request属性的初始值。这表示Request生成此响应的内容。
url
包含响应URL的字符串。

该属性是只读的。更改响应使用的URL replace()

status
表示响应的HTTP状态的整数。示例:200, 404
headers
类似字典的对象,包含响应头。可以使用get()返回具有指定名称的第一个标头值来访问值,或者getlist()返回具有指定名称的所有标头值。例如,此调用将为您提供标题中的所有Cookie:

response.headers.getlist('Set-Cookie')
body
这个回复的正文。请记住,Response.body始终是一个字节对象。如果您想使用unicode版本TextResponse.text(仅在TextResponse 和子类中可用)。

该属性是只读的。更改响应使用的正文 replace()

request
Request生成此响应的对象。在响应和请求通过所有Downloader Middleware之后,此属性在Scrapy引擎中分配。特别是,这意味着:

  • HTTP重定向将导致原始请求(重定向前的URL)被分配给重定向的响应(重定向后的最终URL)。
  • Response.request.url并不总是等于Response.url
  • 此属性仅在蜘蛛代码和Spider Middleware中可用 ,但在下载器中间件中不可用(尽管您通过其他方式可以获得请求)和response_downloaded信号的处理程序。
meta
对象Request.meta属性的 快捷方式Response.request(即self.request.meta)。

Response.request属性不同,属性Response.meta 沿着重定向和重试传播,因此您将获得Request.meta从蜘蛛发送的原始属性。

也可以看看

Request.meta 属性

flags
包含此响应标志的列表。标志是用于标记响应的标签。例如:‘cached’‘redirected ‘等。它们显示在响应(__str__ 方法)的字符串表示中,引擎用于记录。
copy
返回一个新的Response,它是此Response的副本。
replace[urlstatusheadersbodyrequestflagscls ]
返回具有相同成员的Response对象,但通过指定的任何关键字参数给定新值的成员除外。Response.meta默认情况下复制该属性。
urljoinurl 
通过将Response url与可能的相对URL 组合来构造绝对URL。

这是urlparse.urljoin的包装器,它只是进行此调用的别名:

urlparse.urljoin(response.url, url)
followurlcallback = Nonemethod =’GET’headers = Nonebody = Nonecookies = Nonemeta = Noneencoding =’utf-8′priority = 0dont_filter = Falseerrback = None 
返回一个Request实例以关注链接url。它接受与Request.__init__方法相同的参数,但url可以是相对URL或scrapy.link.Link对象,而不仅是绝对URL。

TextResponsefollow() 除了绝对/相对URL和链接对象之外,还提供了一种支持选择器的方法。

响应子类

以下是可用的内置Response子类列表。您还可以将Response类子类化以实现您自己的功能。

TextResponse对象

classscrapy.http.TextResponseurl [encoding [… ]]
TextResponse对象将编码功能添加到基Response类,该基 类仅用于二进制数据,例如图像,声音或任何媒体文件。

TextResponse除了基础Response对象之外,对象还支持新的构造函数参数。其余功能与Response课程相同,此处未记录。

参数: encodingstring) – 是一个字符串,其中包含用于此响应的编码。如果TextResponse使用unicode主体创建对象,则将使用此编码对其进行编码(请记住body属性始终为字符串)。如果encodingNone(默认值),则将在响应标头和正文中查找编码。

TextResponse除了标准属性之外,对象还支持以下属性Response

text
响应体,作为unicode。

与之相同response.body.decode(response.encoding),但结果在第一次调用后缓存,因此您可以response.text多次访问 而无需额外开销。

注意

unicode(response.body)不是将响应体转换为unicode的正确方法:您将使用系统默认编码(通常为ascii)而不是响应编码。

encoding
带有此响应编码的字符串。通过尝试以下机制解决编码,按顺序:

  1. 在构造函数编码参数中传递的编码
  2. 在Content-Type HTTP标头中声明的编码。如果此编码无效(即未知),则忽略该编码并尝试下一个解析机制。
  3. 响应正文中声明的编码。TextResponse类不为此提供任何特殊功能。但是, HtmlResponseXmlResponse类一样。
  4. 通过查看响应体来推断编码。这是一个更脆弱的方法,但最后一个尝试。
selector
Selector使用响应作为目标实例。选择器在第一次访问时被懒惰地实例化。

TextResponse除了标准方法之外,对象还支持以下方法Response

xpath查询
快捷方式TextResponse.selector.xpath(query)

response.xpath('//p')
css查询
快捷方式TextResponse.selector.css(query)

response.css('p')
followurlcallback = Nonemethod =’GET’headers = Nonebody = Nonecookies = Nonemeta = Noneencoding = Nonepriority = 0dont_filter = Falseerrback = None 
返回一个Request实例以关注链接url。它接受与Request.__init__方法相同的参数,但url不仅可以是绝对URL,还可以

  • 相对URL;
  • scrapy.link.Link对象(例如链接提取器结果);
  • 属性选择器(不是SelectorList) – 例如 response.css('a::attr(href)')[0]response.xpath('//img/@src')[0]
  • 选择器<a><link>元素,例如 response.css('a.my_link')[0]

请参阅创建用法示例请求的快捷方式

body_as_unicode
相同text,但作为方法可用。保留此方法是为了向后兼容; 请更喜欢response.text

HtmlResponse对象

classscrapy.http.HtmlResponseurl [… ]
HtmlResponse班是的子类TextResponse ,其增加了通过查看HTML编码自动发现支持META HTTP-EQUIV属性。见TextResponse.encoding

XmlResponse对象

classscrapy.http.XmlResponseurl [… ]
XmlResponse班是的子类TextResponse,其增加了通过查看XML声明行编码自动发现支持。见TextResponse.encoding

评论被关闭。