请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

cookies失效重载问题

bobby老师,你好。
我有一个脚本一直都运行良好的,近段时间网站调整的Cookie策略,Cookie一天后就失效,需要重载Cookie,问题我爬的数据是直接读库的KEY,如果整个重启,那所有KEY都会重新爬过,这样我没办法有效遍历一次数据库。现在想到的办法是出现登录失效后,重新用selenium登录账号,获取Cookie。问题来了,无论怎么调用加载,Cookie都放不进去原来正在运行的框架脚本中,不能有效覆盖掉失效的Cookie
尝试过方法:
1、直接在类中写全局变量
图片描述
报错后重新获取,将Cookie赋值到全局变量cookie_dict中,cookie然后通过yield调用,
yield Request(url = parse.urljoin(response.url, post_url), cookies = self.cookie_dict, callback = self.parse_detail)
由于并发问题,第一个链接是登录获取到的,然后的链接都会卡壳的情况,感觉是异步的问题,全局变量不能有效赋值

2、修改middleware中间件的cookie
我这边本来已经调用 def start_requests(self)方法,第一次Cookie就是在这里继承出去,查看了其他同学的问题,是比middleware优先级别的

3、现在请教下,有没有比较简单直白的Cookie加载方法,能在Cookie失效后重新赋值正确Cookie上去,因为scrapy框架时候异步的,调试都不好调试,然后cookie失效又是隔天才失效,这问题折磨了我几天了,希望能得到您的答疑,先谢谢了。

正在回答 回答被采纳积分+3

1回答

bobby 2021-11-18 18:15:13

抓取cookie的项目重新开一个scrapy项目专门抓取cookie,不过最好的是使用自己多线程获取,没有必要使用scrapy, 这个线程定时扫描那些已经超时的cookie然后去获取就行了,每次更新cookie以后记得记录一下更新的时间就行了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕瓜6579165 #1
    获取到有效的cookie怎么重载进去呢,老师,今天换了2种方法还是不行
    回复 有任何疑惑可以回复我~ 2021-11-18 18:32:02
  • bobby 回复 提问者 慕瓜6579165 #2
    有效的cookie你只需要放入redis即可,但是你的scrapy中的middleware是针对每个request都要去重新到redis中拿到cookie的,所以只要你把最新的cookie放入redis,那么下一个request就会拿到
    回复 有任何疑惑可以回复我~ 2021-11-23 13:53:49
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信