scrapy設置cookie的三種方式


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設置為false

COOKIES_ENABLED = False

2.如果使用cookies=cookies的方式設置cookie
那么需要把settings.py的COOKIES_ENABLED設置為true

COOKIES_ENABLED = True

3.使用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.text
        url = "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.text
        if u"我的主頁" in source:
            print "又找到了"
        else:
            print "沒有cookie"

首先在start_requests中,在meta里添加一個cookiejar屬性,這個鍵必須這個名,然后是后面值可以從0開始,如果多個start_url可以使用列表的里url對應的下標作為cookiejar的值,
程序可以通過傳入的不同值傳遞多個start_url的cookie。
后面需要使用cookie地方使用meta={'cookiejar': response.meta['cookiejar']}即可。
這種方法的好處:

這種是通過meta的方式,將為spider維護多個獨立的cookie會話。如果使用cookies ={},則必須手動維護單獨的cookie會話。

下面這個圖是cookiejar的調用棧


免責聲明!

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



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