scrapy使用cookie的三種方式

點(diǎn)擊上方“Python學(xué)習(xí)開(kāi)發(fā)”,選擇“加為星標(biāo)”
第一時(shí)間關(guān)注Python技術(shù)干貨!
1.如果是在headers中使用
????def?start_requests(self):
????????headers?=?{
????????????"user-agent":?"Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_5)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/87.0.4280.88?Safari/537.36",
????????????"cookie":"你的微博cookie"
????????}
????????url?=?"https://weibo.com/u/{}".format("你的微博id")
????????yield?Request(url,?callback=self.parse,?headers=headers)
那么需要把settings.py的COOKIES_ENABLED設(shè)置為false
COOKIES_ENABLED?=?False
2.如果使用cookies=cookies的方式設(shè)置cookie
那么需要把settings.py的COOKIES_ENABLED設(shè)置為true
COOKIES_ENABLED?=?True
3.多個(gè)url使用cookiejar
此方法也受COOKIES_ENABLED=True的影響
代碼示例
class?CookieTestSpider(scrapy.Spider):
????name?=?'usecookie'
????cookie_dict?=?{
????????"SUB":?"你的微博cookie"}
????headers?=?{
????????"user-agent":?"Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_5)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/87.0.4280.88?Safari/537.36",
????}
????weibo_id?=?"你的微博主頁(yè)id"
????def?start_requests(self):
????????url?=?"https://weibo.com/u/{}".format(self.weibo_id)
????????yield?Request(url,?callback=self.parse,?headers=self.headers,?cookies=self.cookie_dict,?meta={'cookiejar':?1})
????def?parse(self,?response):
????????source?=?response.text
????????url?=?"https://weibo.com/u/{}".format(self.weibo_id)
????????if?u"我的主頁(yè)"?in?source:
????????????print?"找到了"
????????????yield?scrapy.Request(url,?headers=self.headers,?meta={'cookiejar':?response.meta['cookiejar']},
?????????????????????????????????callback=self.parse_page,?dont_filter=True)
????????else:
????????????print?"沒(méi)有cookie"
????def?parse_page(self,?response):
????????source?=?response.text
????????if?u"我的主頁(yè)"?in?source:
????????????print?"又找到了"
????????else:
????????????print?"沒(méi)有cookie"
首先在start_requests中,在meta里添加一個(gè)cookiejar屬性,這個(gè)鍵必須這個(gè)名,然后是后面值可以從0開(kāi)始,如果多個(gè)start_url可以使用列表的里url對(duì)應(yīng)的下標(biāo)作為cookiejar的值,
程序可以通過(guò)傳入的不同值傳遞多個(gè)start_url的cookie。
后面需要使用cookie地方使用meta={'cookiejar': response.meta['cookiejar']}即可。
這種方法的好處:
這種是通過(guò)meta的方式,將為spider維護(hù)多個(gè)獨(dú)立的cookie會(huì)話(huà)。如果使用cookies ={},則必須手動(dòng)維護(hù)單獨(dú)的cookie會(huì)話(huà)。
下面這個(gè)圖是cookiejar的調(diào)用棧

評(píng)論
圖片
表情
