Python版本管理:pyenv和pyenv-virtualenv
Scrapy爬蟲(chóng)入門(mén)教程一 安裝和基本使用
Scrapy爬蟲(chóng)入門(mén)教程二 官方提供Demo
Scrapy爬蟲(chóng)入門(mén)教程三 命令行工具介紹和示例
Scrapy爬蟲(chóng)入門(mén)教程四 Spider(爬蟲(chóng))
Scrapy爬蟲(chóng)入門(mén)教程五 Selectors(選擇器)
Scrapy爬蟲(chóng)入門(mén)教程六 Items(項(xiàng)目)
Scrapy爬蟲(chóng)入門(mén)教程七 Item Loaders(項(xiàng)目加載器)
Scrapy爬蟲(chóng)入門(mén)教程八 交互式 shell 方便調(diào)試
Scrapy爬蟲(chóng)入門(mén)教程九 Item Pipeline(項(xiàng)目管道)
Scrapy爬蟲(chóng)入門(mén)教程十 Feed exports(導(dǎo)出文件)
Scrapy爬蟲(chóng)入門(mén)教程十一 Request和Response(請(qǐng)求和響應(yīng))
Scrapy爬蟲(chóng)入門(mén)教程十二 Link Extractors(鏈接提取器)
開(kāi)發(fā)環(huán)境:
Python 3.6.0 版本 (當(dāng)前最新)
Scrapy 1.3.2 版本 (當(dāng)前最新)
請(qǐng)求和響應(yīng)
Scrapy的Request和Response對(duì)象用于爬網(wǎng)網(wǎng)站。
通常,Request對(duì)象在爬蟲(chóng)程序中生成并傳遞到系統(tǒng),直到它們到達(dá)下載程序,后者執(zhí)行請(qǐng)求并返回一個(gè)Response對(duì)象,該對(duì)象返回到發(fā)出請(qǐng)求的爬蟲(chóng)程序。
上面一段話(huà)比較拗口,有web經(jīng)驗(yàn)的同學(xué),應(yīng)該都了解的,不明白看下面的圖大概理解下。
爬蟲(chóng)->Request:創(chuàng)建
Request->Response:獲取下載數(shù)據(jù)
Response->爬蟲(chóng):數(shù)據(jù)

兩個(gè)類(lèi)Request和Response類(lèi)都有一些子類(lèi),它們添加基類(lèi)中不需要的功能。這些在下面的請(qǐng)求子類(lèi)和 響應(yīng)子類(lèi)中描述。
Request objects
class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])
一個(gè)Request對(duì)象表示一個(gè)HTTP請(qǐng)求,它通常是在爬蟲(chóng)生成,并由下載執(zhí)行,從而生成Response。
- 參數(shù):
url(string)- 此請(qǐng)求的網(wǎng)址callback(callable)- 將使用此請(qǐng)求的響應(yīng)(一旦下載)作為其第一個(gè)參數(shù)調(diào)用的函數(shù)。有關(guān)更多信息,請(qǐng)參閱下面的將附加數(shù)據(jù)傳遞給回調(diào)函數(shù)。如果請(qǐng)求沒(méi)有指定回調(diào),parse()將使用spider的 方法。請(qǐng)注意,如果在處理期間引發(fā)異常,則會(huì)調(diào)用errback。method(string)- 此請(qǐng)求的HTTP方法。默認(rèn)為'GET'。meta(dict)- 屬性的初始值Request.meta。如果給定,在此參數(shù)中傳遞的dict將被淺復(fù)制。body(str或unicode)- 請(qǐng)求體。如果unicode傳遞了a,那么它被編碼為 str使用傳遞的編碼(默認(rèn)為utf-8)。如果 body沒(méi)有給出,則存儲(chǔ)一個(gè)空字符串。不管這個(gè)參數(shù)的類(lèi)型,存儲(chǔ)的最終值將是一個(gè)str(不會(huì)是unicode或None)。headers(dict)- 這個(gè)請(qǐng)求的頭。dict值可以是字符串(對(duì)于單值標(biāo)頭)或列表(對(duì)于多值標(biāo)頭)。如果 None作為值傳遞,則不會(huì)發(fā)送HTTP頭。-
cookie(dict或list)- 請(qǐng)求cookie。這些可以以?xún)煞N形式發(fā)送。- 使用dict:
request_with_cookies = Request(url="http://www.example.com", cookies={'currency': 'USD', 'country': 'UY'})
* 使用列表:
```
request_with_cookies = Request(url="http://www.example.com",
cookies=[{'name': 'currency',
'value': 'USD',
'domain': 'example.com',
'path': '/currency'}])
```
后一種形式允許定制 cookie的屬性domain和path屬性。這只有在保存Cookie用于以后的請(qǐng)求時(shí)才有用。
當(dāng)某些網(wǎng)站返回Cookie(在響應(yīng)中)時(shí),這些Cookie會(huì)存儲(chǔ)在該域的Cookie中,并在將來(lái)的請(qǐng)求中再次發(fā)送。這是任何常規(guī)網(wǎng)絡(luò)瀏覽器的典型行為。但是,如果由于某種原因,您想要避免與現(xiàn)有Cookie合并,您可以通過(guò)將dont_merge_cookies關(guān)鍵字設(shè)置為T(mén)rue 來(lái)指示Scrapy如此操作 Request.meta。
不合并Cookie的請(qǐng)求示例:
request_with_cookies = Request(url="http://www.example.com",
cookies={'currency': 'USD', 'country': 'UY'},
meta={'dont_merge_cookies': True})
有關(guān)詳細(xì)信息,請(qǐng)參閱CookiesMiddleware。
encoding(string)- 此請(qǐng)求的編碼(默認(rèn)為'utf-8')。此編碼將用于對(duì)URL進(jìn)行百分比編碼,并將正文轉(zhuǎn)換為str(如果給定unicode)。priority(int)- 此請(qǐng)求的優(yōu)先級(jí)(默認(rèn)為0)。調(diào)度器使用優(yōu)先級(jí)來(lái)定義用于處理請(qǐng)求的順序。具有較高優(yōu)先級(jí)值的請(qǐng)求將較早執(zhí)行。允許負(fù)值以指示相對(duì)低優(yōu)先級(jí)。dont_filter(boolean)- 表示此請(qǐng)求不應(yīng)由調(diào)度程序過(guò)濾。當(dāng)您想要多次執(zhí)行相同的請(qǐng)求時(shí)忽略重復(fù)過(guò)濾器時(shí)使用。小心使用它,或者你會(huì)進(jìn)入爬行循環(huán)。默認(rèn)為False。errback(callable)- 如果在處理請(qǐng)求時(shí)引發(fā)任何異常,將調(diào)用的函數(shù)。這包括失敗的404 HTTP錯(cuò)誤等頁(yè)面。它接收一個(gè)Twisted Failure實(shí)例作為第一個(gè)參數(shù)。有關(guān)更多信息,請(qǐng)參閱使用errbacks在請(qǐng)求處理中捕獲異常。url
包含此請(qǐng)求的網(wǎng)址的字符串。請(qǐng)記住,此屬性包含轉(zhuǎn)義的網(wǎng)址,因此它可能與構(gòu)造函數(shù)中傳遞的網(wǎng)址不同。
此屬性為只讀。更改請(qǐng)求使用的URL replace()。
method
表示請(qǐng)求中的HTTP方法的字符串。這保證是大寫(xiě)的。例如:"GET","POST","PUT"等headers
包含請(qǐng)求標(biāo)頭的類(lèi)似字典的對(duì)象。body
包含請(qǐng)求正文的str。
此屬性為只讀。更改請(qǐng)求使用的正文 replace()。
-
meta
包含此請(qǐng)求的任意元數(shù)據(jù)的字典。此dict對(duì)于新請(qǐng)求為空,通常由不同的Scrapy組件(擴(kuò)展程序,中間件等)填充。因此,此dict中包含的數(shù)據(jù)取決于您啟用的擴(kuò)展。
有關(guān)Scrapy識(shí)別的特殊元鍵列表,請(qǐng)參閱Request.meta特殊鍵。
當(dāng)使用or 方法克隆請(qǐng)求時(shí),此dict是淺復(fù)制的 ,并且也可以在您的爬蟲(chóng)中從屬性訪(fǎng)問(wèn)。copy()replace()response.meta
copy()
返回一個(gè)新的請(qǐng)求,它是這個(gè)請(qǐng)求的副本。另請(qǐng)參見(jiàn): 將附加數(shù)據(jù)傳遞到回調(diào)函數(shù)。replace([url, method, headers, body, cookies, meta, encoding, dont_filter, callback, errback])
返回具有相同成員的Request對(duì)象,但通過(guò)指定的任何關(guān)鍵字參數(shù)賦予新值的成員除外。該屬性Request.meta是默認(rèn)復(fù)制(除非新的值在給定的meta參數(shù))。另請(qǐng)參見(jiàn) 將附加數(shù)據(jù)傳遞給回調(diào)函數(shù)。
將附加數(shù)據(jù)傳遞給回調(diào)函數(shù)
請(qǐng)求的回調(diào)是當(dāng)下載該請(qǐng)求的響應(yīng)時(shí)將被調(diào)用的函數(shù)。將使用下載的Response對(duì)象作為其第一個(gè)參數(shù)來(lái)調(diào)用回調(diào)函數(shù)。
例:
def parse_page1(self, response):
return scrapy.Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
def parse_page2(self, response):
# this would log http://www.example.com/some_page.html
self.logger.info("Visited %s", response.url)
在某些情況下,您可能有興趣向這些回調(diào)函數(shù)傳遞參數(shù),以便稍后在第二個(gè)回調(diào)中接收參數(shù)。您可以使用該Request.meta屬性。
以下是使用此機(jī)制傳遞項(xiàng)目以填充來(lái)自不同頁(yè)面的不同字段的示例:
def parse_page1(self, response):
item = MyItem()
item['main_url'] = response.url
request = scrapy.Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
request.meta['item'] = item
yield request
def parse_page2(self, response):
item = response.meta['item']
item['other_url'] = response.url
yield item
使用errbacks在請(qǐng)求處理中捕獲異常
請(qǐng)求的errback是在處理異常時(shí)被調(diào)用的函數(shù)。
它接收一個(gè)Twisted Failure實(shí)例作為第一個(gè)參數(shù),并可用于跟蹤連接建立超時(shí),DNS錯(cuò)誤等。
這里有一個(gè)示例爬蟲(chóng)記錄所有錯(cuò)誤,并捕獲一些特定的錯(cuò)誤,如果需要:
import scrapy
from scrapy.spidermiddlewares.httperror import HttpError
from twisted.internet.error import DNSLookupError
from twisted.internet.error import TimeoutError, TCPTimedOutError
class ErrbackSpider(scrapy.Spider):
name = "errback_example"
start_urls = [
"http://www.httpbin.org/", # HTTP 200 expected
"http://www.httpbin.org/status/404", # Not found error
"http://www.httpbin.org/status/500", # server issue
"http://www.httpbin.org:12345/", # non-responding host, timeout expected
"http://www.httphttpbinbin.org/", # DNS error expected
]
def start_requests(self):
for u in self.start_urls:
yield scrapy.Request(u, callback=self.parse_httpbin,
errback=self.errback_httpbin,
dont_filter=True)
def parse_httpbin(self, response):
self.logger.info('Got successful response from {}'.format(response.url))
# do something useful here...
def errback_httpbin(self, failure):
# log all failures
self.logger.error(repr(failure))
# in case you want to do something special for some errors,
# you may need the failure's type:
if failure.check(HttpError):
# these exceptions come from HttpError spider middleware
# you can get the non-200 response
response = failure.value.response
self.logger.error('HttpError on %s', response.url)
elif failure.check(DNSLookupError):
# this is the original request
request = failure.request
self.logger.error('DNSLookupError on %s', request.url)
elif failure.check(TimeoutError, TCPTimedOutError):
request = failure.request
self.logger.error('TimeoutError on %s', request.url)
Request.meta特殊鍵
該Request.meta屬性可以包含任何任意數(shù)據(jù),但有一些特殊的鍵由Scrapy及其內(nèi)置擴(kuò)展識(shí)別。
那些是:
dont_redirect
dont_retry
handle_httpstatus_list
handle_httpstatus_all
dont_merge_cookies(參見(jiàn)cookies構(gòu)造函數(shù)的Request參數(shù))
cookiejar
dont_cache
redirect_urls
bindaddress
dont_obey_robotstxt
download_timeout
download_maxsize
download_latency
proxy
bindaddress
用于執(zhí)行請(qǐng)求的出站IP地址的IP。
download_timeout
下載器在超時(shí)前等待的時(shí)間量(以秒為單位)。參見(jiàn):DOWNLOAD_TIMEOUT。
download_latency
自請(qǐng)求已啟動(dòng)以來(lái),用于獲取響應(yīng)的時(shí)間量,即通過(guò)網(wǎng)絡(luò)發(fā)送的HTTP消息。此元鍵僅在響應(yīng)已下載時(shí)可用。雖然大多數(shù)其他元鍵用于控制Scrapy行為,但這應(yīng)該是只讀的。
請(qǐng)求子類(lèi)
這里是內(nèi)置子類(lèi)的Request列表。您還可以將其子類(lèi)化以實(shí)現(xiàn)您自己的自定義功能。
FormRequest對(duì)象
FormRequest類(lèi)擴(kuò)展了Request具有處理HTML表單的功能的基礎(chǔ)。它使用lxml.html表單 從Response對(duì)象的表單數(shù)據(jù)預(yù)填充表單字段。
class scrapy.http.FormRequest(url[, formdata, ...])
本FormRequest類(lèi)增加了新的構(gòu)造函數(shù)的參數(shù)。其余的參數(shù)與Request類(lèi)相同,這里沒(méi)有記錄。
- 參數(shù):formdata(元組的dict或iterable) - 是一個(gè)包含HTML Form數(shù)據(jù)的字典(或(key,value)元組的迭代),它將被url編碼并分配給請(qǐng)求的主體。
該FormRequest對(duì)象支持除標(biāo)準(zhǔn)以下類(lèi)方法Request的方法:
classmethod from_response(response[, formname=None, formid=None, formnumber=0, formdata=None, formxpath=None, formcss=None, clickdata=None, dont_click=False, ...])
返回一個(gè)新FormRequest對(duì)象,其中的表單字段值已預(yù)先<form>填充在給定響應(yīng)中包含的HTML 元素中。有關(guān)示例,請(qǐng)參閱 使用FormRequest.from_response()來(lái)模擬用戶(hù)登錄。
該策略是在任何可查看的表單控件上默認(rèn)自動(dòng)模擬點(diǎn)擊,如a 。即使這是相當(dāng)方便,并且經(jīng)常想要的行為,有時(shí)它可能導(dǎo)致難以調(diào)試的問(wèn)題。例如,當(dāng)使用使用javascript填充和/或提交的表單時(shí),默認(rèn)行為可能不是最合適的。要禁用此行為,您可以將參數(shù)設(shè)置 為。此外,如果要更改單擊的控件(而不是禁用它),您還可以使用 參數(shù)。<input type="submit"> from_response() dont_click True clickdata
參數(shù):
- response(Responseobject) - 包含將用于預(yù)填充表單字段的HTML表單的響應(yīng)
- formname(string) - 如果給定,將使用name屬性設(shè)置為此值的形式。
- formid(string) - 如果給定,將使用id屬性設(shè)置為此值的形式。
- formxpath(string) - 如果給定,將使用匹配xpath的第一個(gè)表單。
- formcss(string) - 如果給定,將使用匹配css選擇器的第一個(gè)形式。
- formnumber(integer) - 當(dāng)響應(yīng)包含多個(gè)表單時(shí)要使用的表單的數(shù)量。第一個(gè)(也是默認(rèn))是0。
- formdata(dict) - 要在表單數(shù)據(jù)中覆蓋的字段。如果響應(yīng)<form>元素中已存在字段,則其值將被在此參數(shù)中傳遞的值覆蓋。
- clickdata(dict) - 查找控件被點(diǎn)擊的屬性。如果沒(méi)有提供,表單數(shù)據(jù)將被提交,模擬第一個(gè)可點(diǎn)擊元素的點(diǎn)擊。除了html屬性,控件可以通過(guò)其相對(duì)于表單中其他提交表輸入的基于零的索引,通過(guò)nr屬性來(lái)標(biāo)識(shí)。
- dont_click(boolean) - 如果為T(mén)rue,表單數(shù)據(jù)將在不點(diǎn)擊任何元素的情況下提交。
這個(gè)類(lèi)方法的其他參數(shù)直接傳遞給 FormRequest構(gòu)造函數(shù)。
在新版本0.10.3:該formname參數(shù)。
在新版本0.17:該formxpath參數(shù)。
新的版本1.1.0:該formcss參數(shù)。
新的版本1.1.0:該formid參數(shù)。
請(qǐng)求使用示例
使用FormRequest通過(guò)HTTP POST發(fā)送數(shù)據(jù)
如果你想在你的爬蟲(chóng)中模擬HTML表單POST并發(fā)送幾個(gè)鍵值字段,你可以返回一個(gè)FormRequest對(duì)象(從你的爬蟲(chóng))像這樣:
return [FormRequest(url="http://www.example.com/post/action",
formdata={'name': 'John Doe', 'age': '27'},
callback=self.after_post)]
使用FormRequest.from_response()來(lái)模擬用戶(hù)登錄
網(wǎng)站通常通過(guò)元素(例如會(huì)話(huà)相關(guān)數(shù)據(jù)或認(rèn)證令牌(用于登錄頁(yè)面))提供預(yù)填充的表單字段。進(jìn)行剪貼時(shí),您需要自動(dòng)預(yù)填充這些字段,并且只覆蓋其中的一些,例如用戶(hù)名和密碼。您可以使用 此作業(yè)的方法。這里有一個(gè)使用它的爬蟲(chóng)示例:<input type="hidden"> FormRequest.from_response()
import scrapy
class LoginSpider(scrapy.Spider):
name = 'example.com'
start_urls = ['http://www.example.com/users/login.php']
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formdata={'username': 'john', 'password': 'secret'},
callback=self.after_login
)
def after_login(self, response):
# check login succeed before going on
if "authentication failed" in response.body:
self.logger.error("Login failed")
return
# continue scraping with authenticated session...
響應(yīng)對(duì)象
class scrapy.http.Response(url[, status=200, headers=None, body=b'', flags=None, request=None])
一個(gè)Response對(duì)象表示的HTTP響應(yīng),這通常是下載(由下載),并供給到爬蟲(chóng)進(jìn)行處理。
參數(shù):
- url(string) - 此響應(yīng)的URL
- status(integer) - 響應(yīng)的HTTP狀態(tài)。默認(rèn)為200。
- headers(dict) - 這個(gè)響應(yīng)的頭。dict值可以是字符串(對(duì)于單值標(biāo)頭)或列表(對(duì)于多值標(biāo)頭)。
- body(str) - 響應(yīng)體。它必須是str,而不是unicode,除非你使用一個(gè)編碼感知響應(yīng)子類(lèi),如
TextResponse。 - flags(list) - 是一個(gè)包含屬性初始值的
Response.flags列表。如果給定,列表將被淺復(fù)制。 - request(Requestobject) - 屬性的初始值
Response.request。這代表Request生成此響應(yīng)。
url
包含響應(yīng)的URL的字符串。
此屬性為只讀。更改響應(yīng)使用的URL replace()。
status
表示響應(yīng)的HTTP狀態(tài)的整數(shù)。示例:200, 404。
headers
包含響應(yīng)標(biāo)題的類(lèi)字典對(duì)象??梢允褂胓et()返回具有指定名稱(chēng)的第一個(gè)標(biāo)頭值或getlist()返回具有指定名稱(chēng)的所有標(biāo)頭值來(lái)訪(fǎng)問(wèn)值。例如,此調(diào)用會(huì)為您提供標(biāo)題中的所有Cookie:
response.headers.getlist('Set-Cookie')
body
本回復(fù)的正文。記住Response.body總是一個(gè)字節(jié)對(duì)象。如果你想unicode版本使用 TextResponse.text(只在TextResponse 和子類(lèi)中可用)。
此屬性為只讀。更改響應(yīng)使用的主體 replace()。
request
Request生成此響應(yīng)的對(duì)象。在響應(yīng)和請(qǐng)求通過(guò)所有下載中間件后,此屬性在Scrapy引擎中分配。特別地,這意味著:
HTTP重定向?qū)?dǎo)致將原始請(qǐng)求(重定向之前的URL)分配給重定向響應(yīng)(重定向后具有最終URL)。
Response.request.url并不總是等于Response.url
此屬性?xún)H在爬蟲(chóng)程序代碼和 Spider Middleware中可用,但不能在Downloader Middleware中使用(盡管您有通過(guò)其他方式可用的請(qǐng)求)和處理程序response_downloaded。
meta
的快捷方式Request.meta的屬性 Response.request對(duì)象(即self.request.meta)。
與Response.request屬性不同,Response.meta 屬性沿重定向和重試傳播,因此您將獲得Request.meta從您的爬蟲(chóng)發(fā)送的原始屬性。
也可以看看
Request.meta 屬性
flags
包含此響應(yīng)的標(biāo)志的列表。標(biāo)志是用于標(biāo)記響應(yīng)的標(biāo)簽。例如:'cached','redirected '等等。它們顯示在Response(__ str__ 方法)的字符串表示上,它被引擎用于日志記錄。
copy()
返回一個(gè)新的響應(yīng),它是此響應(yīng)的副本。
replace([ url,status,headers,body,request,flags,cls ] )
返回具有相同成員的Response對(duì)象,但通過(guò)指定的任何關(guān)鍵字參數(shù)賦予新值的成員除外。該屬性Response.meta是默認(rèn)復(fù)制。
urljoin(url )
通過(guò)將響應(yīng)url與可能的相對(duì)URL 組合構(gòu)造絕對(duì)url。
這是一個(gè)包裝在urlparse.urljoin,它只是一個(gè)別名,使這個(gè)調(diào)用:
urlparse.urljoin(response.url, url)
響應(yīng)子類(lèi)
這里是可用的內(nèi)置Response子類(lèi)的列表。您還可以將Response類(lèi)子類(lèi)化以實(shí)現(xiàn)您自己的功能。
TextResponse對(duì)象
class scrapy.http.TextResponse(url[, encoding[, ...]])
TextResponse對(duì)象向基Response類(lèi)添加編碼能力 ,這意味著僅用于二進(jìn)制數(shù)據(jù),例如圖像,聲音或任何媒體文件。
TextResponse對(duì)象支持一個(gè)新的構(gòu)造函數(shù)參數(shù),除了基礎(chǔ)Response對(duì)象。其余的功能與Response類(lèi)相同,這里沒(méi)有記錄。
參數(shù): encoding(string) - 是一個(gè)字符串,包含用于此響應(yīng)的編碼。如果你創(chuàng)建一個(gè)TextResponse具有unicode主體的對(duì)象,它將使用這個(gè)編碼進(jìn)行編碼(記住body屬性總是一個(gè)字符串)。如果encoding是None(默認(rèn)值),則將在響應(yīng)標(biāo)頭和正文中查找編碼。
TextResponse除了標(biāo)準(zhǔn)對(duì)象之外,對(duì)象還支持以下屬性Response
text
響應(yīng)體,如unicode。
同樣response.body.decode(response.encoding),但結(jié)果是在第一次調(diào)用后緩存,因此您可以訪(fǎng)問(wèn) response.text多次,無(wú)需額外的開(kāi)銷(xiāo)。
注意
unicode(response.body)不是一個(gè)正確的方法來(lái)將響應(yīng)身體轉(zhuǎn)換為unicode:您將使用系統(tǒng)默認(rèn)編碼(通常為ascii)而不是響應(yīng)編碼。
encoding
包含此響應(yīng)的編碼的字符串。編碼通過(guò)嘗試以下機(jī)制按順序解決:
- 在構(gòu)造函數(shù)編碼參數(shù)中傳遞的編碼
- 在Content-Type HTTP頭中聲明的編碼。如果此編碼無(wú)效(即未知),則會(huì)被忽略,并嘗試下一個(gè)解析機(jī)制。
- 在響應(yīng)主體中聲明的編碼。TextResponse類(lèi)不提供任何特殊功能。然而, HtmlResponse和XmlResponse類(lèi)做。
- 通過(guò)查看響應(yīng)體來(lái)推斷的編碼。這是更脆弱的方法,但也是最后一個(gè)嘗試。
selector
一個(gè)Selector使用響應(yīng)為目標(biāo)實(shí)例。選擇器在第一次訪(fǎng)問(wèn)時(shí)被延遲實(shí)例化。
TextResponse對(duì)象除了標(biāo)準(zhǔn)對(duì)象外還支持以下方法Response:
xpath(查詢(xún))
快捷方式TextResponse.selector.xpath(query):
response.xpath('//p')
css(query)
快捷方式 TextResponse.selector.css(query):
response.css('p')
body_as_unicode()
同樣text,但可用作方法。保留此方法以實(shí)現(xiàn)向后兼容; 請(qǐng)喜歡response.text。
HtmlResponse對(duì)象
class scrapy.http.HtmlResponse(url [,... ] )
本HtmlResponse類(lèi)的子類(lèi),TextResponse 這增加了通過(guò)查看HTML編碼自動(dòng)發(fā)現(xiàn)支持META HTTP-EQUIV屬性。見(jiàn)TextResponse.encoding。
XmlResponse對(duì)象
class scrapy.http.XmlResponse(url [,... ] )
本XmlResponse類(lèi)的子類(lèi),TextResponse這增加了通過(guò)查看XML聲明線(xiàn)路編碼自動(dòng)發(fā)現(xiàn)支持。見(jiàn)TextResponse.encoding。