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