scrapy 2.3 文本響應(yīng)對(duì)象

2021-06-10 09:53 更新

下面是可用的內(nèi)置響應(yīng)子類(lèi)的列表。您還可以對(duì)響應(yīng)類(lèi)進(jìn)行子類(lèi)化,以實(shí)現(xiàn)您自己的功能。

        文本響應(yīng)對(duì)象

classscrapy.http.TextResponse(url[, encoding[, ...]])

?TextResponse? 對(duì)象將編碼功能添加到基 ?Response? 類(lèi),它只用于二進(jìn)制數(shù)據(jù),如圖像、聲音或任何媒體文件。

?TextResponse? 對(duì)象支持新的 __init__ 方法參數(shù),以及基 ?Response? 物體。其余功能與 ?Response? 類(lèi),此處未記錄。

參數(shù)

encoding (str) -- 包含用于此響應(yīng)的編碼的字符串。如果創(chuàng)建一個(gè) ?TextResponse? 對(duì)象,它將轉(zhuǎn)換為使用此編碼編碼的字節(jié)。如果 編碼 是 None (默認(rèn)),將在響應(yīng)頭和正文中查找編碼。

?TextResponse? 除了標(biāo)準(zhǔn)之外,對(duì)象還支持以下屬性 ?Response? 一:

text

響應(yīng)體,作為字符串。

一樣 response.body.decode(response.encoding) ,但結(jié)果在第一次調(diào)用后緩存,因此您可以訪問(wèn) response.text 多次無(wú)額外開(kāi)銷(xiāo)。

注解

str(response.body) 不是將響應(yīng)正文轉(zhuǎn)換為字符串的正確方法:

>>> str(b'body')
"b'body'"
encoding

帶有此響應(yīng)編碼的字符串。按順序嘗試以下機(jī)制來(lái)解決編碼問(wèn)題:

  1. 傳入的編碼 __init__ 方法 encoding 參數(shù)

  2. 在內(nèi)容類(lèi)型HTTP標(biāo)頭中聲明的編碼。如果此編碼無(wú)效(即未知),則忽略它并嘗試下一個(gè)解析機(jī)制。

  3. 響應(yīng)正文中聲明的編碼。TextResponse類(lèi)不為此提供任何特殊功能。然而, ?HtmlResponse? 和 ?XmlResponse? 上課。

  4. 通過(guò)查看響應(yīng)主體推斷出的編碼。這是更脆弱的方法,也是最后一個(gè)嘗試的方法。

selector

A ?Selector? 使用響應(yīng)作為目標(biāo)的實(shí)例。選擇器在第一次訪問(wèn)時(shí)被惰性地實(shí)例化。

?TextResponse? 對(duì)象除了支持標(biāo)準(zhǔn)之外還支持以下方法 ?Response? 一:

xpath(query)

捷徑 TextResponse.selector.xpath(query) ::

response.xpath('//p')
css(query)

捷徑 TextResponse.selector.css(query) ::

response.css('p')
follow(urlcallback=Nonemethod='GET'headers=Nonebody=Nonecookies=Nonemeta=Noneencoding=Nonepriority=0dont_filter=Falseerrback=Nonecb_kwargs=Noneflags=None)

返回A ?Request? 要跟蹤鏈接的實(shí)例 url . 它接受與 Request.__init__ 方法,但 url 不僅可以是絕對(duì)URL,而且可以是

  • 相對(duì)URL

  • 一 ?Link? 對(duì)象,例如 鏈接提取器

  • 一 ?Selector? 對(duì)象 <link> 或 <a> 元素,例如 response.css('a.my_link')[0]

  • 屬性 ?Selector? (不是選擇器列表),例如。 response.css('a::attr(href)')[0] 或 response.xpath('//img/@src')[0]

見(jiàn) 創(chuàng)建請(qǐng)求的快捷方式 用于示例。

follow_all(urls=Nonecallback=Nonemethod='GET'headers=Nonebody=Nonecookies=Nonemeta=Noneencoding=Nonepriority=0dont_filter=Falseerrback=Nonecb_kwargs=Noneflags=Nonecss=Nonexpath=None)

產(chǎn)生 ?Request? 跟蹤所有鏈接的實(shí)例 urls . 它接受與 ?Request? 的 __init__ 方法,除了 urls 元素不需要是絕對(duì)URL,它可以是以下任何一個(gè):

  • 相對(duì)URL

  • 一 ?Link? 對(duì)象,例如 鏈接提取器

  • 一 ?Selector? 對(duì)象 <link> 或 <a> 元素,例如 response.css('a.my_link')[0]

  • 屬性 ?Selector? (不是選擇器列表),例如。 response.css('a::attr(href)')[0] 或 response.xpath('//img/@src')[0]

此外, css 和 xpath 參數(shù)可用于在中執(zhí)行鏈接提取 follow_all 方法(只有一個(gè) urls , css 和 xpath 接受)。

注意,當(dāng)經(jīng)過(guò) SelectorList 作為 urls 參數(shù)或使用 css 或 xpath 參數(shù)時(shí),此方法不會(huì)為無(wú)法從中獲取鏈接的選擇器生成請(qǐng)求(例如,沒(méi)有 href 屬性)

json()

2.2 新版功能.

將JSON文檔反序列化為Python對(duì)象。

從反序列化的JSON文檔返回Python對(duì)象。結(jié)果在第一次調(diào)用后被緩存。

HTMLResponse對(duì)象

classscrapy.http.HtmlResponse(url[, ...])

這個(gè) ?HtmlResponse? 類(lèi)是的子類(lèi) ?TextResponse? 它通過(guò)查看HTML添加了編碼自動(dòng)發(fā)現(xiàn)支持  meta http-equiv 屬性。見(jiàn) ?TextResponse.encoding? .

XmlResponse對(duì)象

classscrapy.http.XmlResponse(url[, ...])

這個(gè) ?XmlResponse? 類(lèi)是的子類(lèi) ?TextResponse? 它通過(guò)查看XML聲明行添加了編碼自動(dòng)發(fā)現(xiàn)支持。見(jiàn) ?TextResponse.encoding? .

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)