飞道的博客

scrapy使用cookie的三种方式

304人阅读  评论(0)

点击上方“Python学习开发”,选择“加为星标”

第一时间关注Python技术干货!

1.如果是在headers中使用


   
  1.     def start_requests(self):
  2.         headers = {
  3.              "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",
  4.              "cookie": "你的微博cookie"
  5.         }
  6.         url =  "https://weibo.com/u/{}".format( "你的微博id")
  7.         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的影响

代码示例


   
  1. class CookieTestSpider(scrapy.Spider):
  2.     name =  'usecookie'
  3.     cookie_dict = {
  4.          "SUB""你的微博cookie"}
  5.     headers = {
  6.          "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",
  7.     }
  8.     weibo_id =  "你的微博主页id"
  9.     def start_requests(self):
  10.         url =  "https://weibo.com/u/{}".format(self.weibo_id)
  11.         yield Request(url, callback=self.parse, headers=self.headers, cookies=self.cookie_dict, meta={ 'cookiejar'1})
  12.     def parse(self, response):
  13.         source = response.text
  14.         url =  "https://weibo.com/u/{}".format(self.weibo_id)
  15.          if u "我的主页" in source:
  16.              print  "找到了"
  17.             yield scrapy.Request(url, headers=self.headers, meta={ 'cookiejar': response.meta[ 'cookiejar']},
  18.                                  callback=self.parse_page, dont_filter=True)
  19.          else:
  20.              print  "没有cookie"
  21.     def parse_page(self, response):
  22.         source = response.text
  23.          if u "我的主页" in source:
  24.              print  "又找到了"
  25.          else:
  26.              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的调用栈


转载:https://blog.csdn.net/muzico425/article/details/111243873
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场