Scrapy框架--使用cookie


CookieMiddleware

class scrapy.downloadermiddlewares.cookies.CookieMiddlewar

該中間件使得爬取需要cookie(例如使用session)的網站成為了可能。 其追蹤了web server發送的cookie,並在之后的request中發送回去, 就如瀏覽器所做的那樣.

 

以下設置可以用來配置cookie中間件:

  • COOKIES_ENABLED
  • COOKIES_DEBUG

單spider多cookie session

Scrapy通過使用 cookiejar Request meta key來支持單spider追蹤多cookie session。 默認情況下其使用一個cookie jar(session),不過您可以傳遞一個標示符來使用多個。

注意這個標識符(即下面代碼中的'i'),這里並不是說使用的cookie就是‘i’,而是第i個cookie!!'cookiejar'是meta的特殊關鍵字,不能以單純的dict來看待。

cookie是追蹤session的,會在request的過程中發生變化,比如在start_requests的時候模擬登陸,cookie就會記錄登錄信息,后續使用該cookie的request就

能繼續沿用其中的cookie。

例如:

for i, url in enumerate(urls):
    yield scrapy.Request("http://www.example.com", meta={'cookiejar': i},
        callback=self.parse_page)

需要注意的是 cookiejar meta key不是”黏性的(sticky)”。 您需要在之后的request請求中接着傳遞。

def parse_page(self, response):
    # do some processing
    return scrapy.Request("http://www.example.com/otherpage",
        meta={'cookiejar': response.meta['cookiejar']},
        callback=self.parse_other_page)

COOKIES_ENABLED

默認: True

是否啟用cookiesmiddleware。如果關閉,cookies將不會發送給web server。

COOKIES_DEBUG

默認: False

如果啟用,Scrapy將記錄所有在request(cookie 請求頭)發送的cookies及response接收到的cookies(set-cookie接收頭)

下面是啟用COOKIES_DEBUG的記錄樣例:

2011-04-06 14:35:10-0300 [scrapy] INFO: Spider opened
2011-04-06 14:35:10-0300 [scrapy] DEBUG: Sending cookies to: <GET http://www.diningcity.com/netherlands/index.html>
        Cookie: clientlanguage_nl=en_EN
2011-04-06 14:35:14-0300 [scrapy] DEBUG: Received cookies from: <200 http://www.diningcity.com/netherlands/index.html>
        Set-Cookie: JSESSIONID=B~FA4DC0C496C8762AE4F1A620EAB34F38; Path=/
        Set-Cookie: ip_isocode=US
        Set-Cookie: clientlanguage_nl=en_EN; Expires=Thu, 07-Apr-2011 21:21:34 GMT; Path=/
2011-04-06 14:49:50-0300 [scrapy] DEBUG: Crawled (200) <GET http://www.diningcity.com/netherlands/index.html> (referer: None)
[...]

 

(翻譯加個人理解,若有問題請指正,謝謝)

官方文檔:https://doc.scrapy.org/en/1.3/topics/downloader-middleware.html#module-scrapy.downloadermiddlewares.cookies


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM