scrapy使用cookie的三种方式
文章轉(zhuǎn)載于 安卓逆向菜鳥修煉記(微信公眾號),個人感覺很實用,記錄下來方便回顧,想看原文的請移步公眾號。
1.如果是在headers中使用(這里的cookie是字符串的形式)
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 = False2.如果使用cookies=cookies的方式設(shè)置cookie(這里的cookie是字典的形式),個人比較習(xí)慣用第二種方式
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",}url = "https://weibo.com/u/{}".format("你的微博id")yield Request(url, callback=self.parse, headers=headers,cookie="你的cookie")那么需要把settings.py的COOKIES_ENABLED設(shè)置為true
COOKIES_ENABLED = True3.多個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 = "你的微博主頁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.texturl = "https://weibo.com/u/{}".format(self.weibo_id)if u"我的主頁" in source:print "找到了"yield scrapy.Request(url, headers=self.headers, meta={'cookiejar': response.meta['cookiejar']},callback=self.parse_page, dont_filter=True)else:print "沒有cookie"def parse_page(self, response):source = response.textif u"我的主頁" in source:print "又找到了"else:print "沒有cookie"首先在start_requests中,在meta里添加一個cookiejar屬性,這個鍵必須這個名,然后是后面值可以從0開始,如果多個start_url可以使用列表的里url對應(yīng)的下標(biāo)作為cookiejar的值,
程序可以通過傳入的不同值傳遞多個start_url的cookie。
后面需要使用cookie地方使用meta={‘cookiejar’: response.meta[‘cookiejar’]}即可。
這種方法的好處:
這種是通過meta的方式,將為spider維護多個獨立的cookie會話。如果使用cookies ={},則必須手動維護單獨的cookie會話。
下面這個圖是cookiejar的調(diào)用棧
總結(jié)
以上是生活随笔為你收集整理的scrapy使用cookie的三种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: frida hook java层常用模板
- 下一篇: 贝壳app Authorization参