请稍等 ...
×

采纳答案成功!

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

基于Scrapy-redis的爬虫,模拟登陆如何设置cookies

老师
基于Scrapy的话,在模拟登陆获取到cookie之后,通过
yield scrapy.Request(url, dont_filter=True, cookies=cookie_dict) 来设置cookies。基于Scrapy-redis的话,改怎么设置cookies呢?

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

1回答

bobby 2020-02-18 17:55:17

scrapy-redis中和scrapy中一样啊,你在每个yield的request中都可以加上这个啊

0 回复 有任何疑惑可以回复我~
  • 提问者 慕尼黑7546459 #1
    自己yield的Request可以加, 但是start_url的怎么加呢
    scrapy-redis的tsart_request和next_request是这样的:
    def start_requests(self):
            """Returns a batch of start requests from redis."""
            return self.next_requests()
    
    def next_requests(self):
            """Returns a request to be scheduled or none."""
            use_set = self.settings.getbool('REDIS_START_URLS_AS_SET', defaults.START_URLS_AS_SET)
            fetch_one = self.server.spop if use_set else self.server.lpop
            # XXX: Do we need to use a timeout here?
            found = 0
            # TODO: Use redis pipeline execution.
            while found < self.redis_batch_size:
                data = fetch_one(self.redis_key)
                if not data:
                    # Queue empty.
                    break
                req = self.make_request_from_data(data)
                if req:
                    yield req
                    found += 1
                else:
                    self.logger.debug("Request not made from data: %r", data)
    
            if found:
                self.logger.debug("Read %s requests from '%s'", found, self.redis_key)
    
    问题: url最终是yield req出去的,该怎么重写方法来设置cookies呢?
    回复 有任何疑惑可以回复我~ 2020-02-20 17:51:03
  • bobby 回复 提问者 慕尼黑7546459 #2
    self.make_request_from_data(data)这个方法可以重载啊 里面加上自己的cookie
    回复 有任何疑惑可以回复我~ 2020-02-22 12:26:43
  • 提问者 慕尼黑7546459 回复 bobby #3
    好的,谢谢老师,这个我后来自己仔细往下看源码,也发现了。
    
    然后,关于cookie池的设计,现在您补录的课程似乎还没上线,老师能提前给个思路吗,因为现在我需要实现这个功能了。
    自己看些网上的,似乎要再独立部署一个服务,通过api的形式调用的方式,感觉这样维护成本太高了
    回复 有任何疑惑可以回复我~ 2020-03-02 17:30:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信