Scrapy Request和Response對象

Request對象

Request對象用來描述一個HTTP請求,下面是其構造器方法的參數列表:

Request(url[, callback, method='GET', headers, body, cookies, meta,encoding='utf-8', 
priority=0, dont_filter=False, errback

下面依次介紹這些參數。
● url(必選)
請求頁面的url地址,bytes或str類型,如'http://www.python.org/doc'。
● callback
頁面解析函數, Callable類型,Request對象請求的頁面下載完成後,由該參數指定的頁面解析函數被調用。如果未傳遞該參數,默認調用Spider的parse方法。
● method
HTTP請求的方法,默認爲'GET'。
● headers
HTTP請求的頭部字典,dict類型,例如{'Accept':'text/html', 'User-Agent':Mozilla/5.0'}。如果其中某項的值爲None,就表示不發送該項HTTP頭部,例如{'Cookie':None},禁止發送Cookie。
● body
HTTP請求的正文,bytes或str類型。
● cookies
Cookie信息字典,dict類型,例如{'currency':  'USD','country': 'UY'}。
● meta
Request的元數據字典,dict類型,用於給框架中其他組件傳遞信息,比如中間件Item  Pipeline。其他組件可以使用Request對象的meta屬性訪問該元數據字典(request.meta),也用於給響應處理函數傳遞信息,詳見Response的meta屬性。
● encoding
url和body參數的編碼默認爲'utf-8'。如果傳入的url或body參數是str類型,就使用該參數進行編碼。
● priority
請求的優先級默認值爲0,優先級高的請求優先下載。
● dont_filter
默認情況下(dont_filter=False),對同一個url地址多次提交下載請求,後面的請求會被去重過濾器過濾(避免重複下載)。如果將該參數置爲True,可以使請求避免被過濾,強制下載。例如,在多次爬取一個內容隨時間而變化的頁面時(每次使用相同的url),可以將該參數置爲True。
● errback
請求出現異常或者出現HTTP錯誤時(如404頁面不存在)的回調函數。

雖然參數很多,但除了url參數外,其他都帶有默認值。在構造Request對象時,通常我們只需傳遞一個url參數或再加一個callback參數,其他使用默認值即可。

在實際應用中,我們幾乎只調用Request的構造器創建對象,但也可以根據需求訪問Request對象的屬性,常用的有以下幾個:
● url
● method
● headers
● body
● meta
這些屬性和構造器參數相對應,這裏不再重複解釋。

 

Response對象

Response對象用來描述一個HTTP響應,Response只是一個基類,根據響應內容的不同有如下子類:
● TextResponse
● HtmlResponse
● XmlResponse
當一個頁面下載完成時,下載器依據HTTP響應頭部中的Content-Type信息創建某個Response的子類對象。我們通常爬取的網頁,其內
容是HTML文本,創建的便是HtmlResponse對象,其中HtmlResponse和XmlResponse是TextResponse的子類。實際上,這3個子類只有細微的差別,這裏以HtmlResponse爲例進行講解。
下面介紹HtmlResponse對象的屬性及方法。
● url
HTTP響應的url地址,str類型。
● status
HTTP響應的狀態碼,int類型,例如200,404。
● headers
HTTP響應的頭頭部,類字典類型,可以調用get或getlist方法對其進行訪問,例如:

response.headers.get('Content-Type')
response.headers.getlist('Set-Cookie')

● body
HTTP響應正文,bytes類型。
● text
文本形式的HTTP響應正文,str類型,它是由response.body使用response.encoding解碼得到的,即

reponse.text = response.body.decode(response.encoding)

● encoding
HTTP響應正文的編碼,它的值可能是從HTTP響應頭部或正文中解析出來的。
● request
產生該HTTP響應的Request對象。
● meta
即response.request.meta,在構造Request對象時,可將要傳遞給響應處理函數的信息通過meta參數傳入;響應處理函數處理響應時,通過response.meta將信息取出。
● selector
Selector對象用於在Response中提取數據(選擇器相關話題在後面章節詳細講解)。
● xpath(query)
使用XPath選擇器在Response中提取數據,實際上它是response.selector.xpath方法的快捷方式(選擇器相關話題在後面章節詳細講解)。
● css(query)
使用CSS選擇器在Response中提取數據,實際上它是response.selector.css方法的快捷方式(選擇器相關話題在後面章節詳細講解)。
● urljoin(url)
用於構造絕對url。當傳入的url參數是一個相對地址時,根據response.url計算出相應的絕對url。例如,response.url爲http://www.example.com/a,url爲b/index.html,調用response.urljoin(url)的結果爲http://www.example.com/a/b/index.html。雖然HtmlResponse對象有很多屬性,但最常用的是以下的3個方法:
● xpath(query)
● css(query)
● urljoin(url)
前兩個方法用於提取數據,後一個方法用於構造絕對url。

發佈了15 篇原創文章 · 獲贊 6 · 訪問量 3579
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章