账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    scrapy RetryMiddleware中间件 重试请求携带请求头和代理ip的问题
    28
    0

    目标:希望在请求ip失败,或则在遇到验证码的时候 重复发起当前请求,直到请求成功,减少爬取的数据遗漏。
    问题:不知我的思路是否正确,目前能在中间件识别到有验证码,也能重复请求,并且确实是携带了新的ip。
    可是重复请求返回的依然是验证码,中间件方法里是不是少些了什么?

    (设置了代理ip,随机请求User-Agent)

    中间件RetryMiddleware 代码如下:

    重试请求

    class LocalRetryMiddleware(RetryMiddleware):
    
        def process_response(self, request, response, spider):
            if request.meta.get('dont_retry', False):
                return response
            print('输出当前页面:', response.body)
            # 验证码判断
            img = response.xpath('//img[@src="/Account/ValidateImage"]')
            print(img)
            if img:
                print('1中间件处 发现有验证码,需要重复请求!')
                time.sleep(random.choice(range(6)))
                print('当前请求ip:', request.meta.get('proxy'))
    
                return self._retry(request, response.body, spider) or response
            return response
    
    
    
        def process_exception(self, request, exception, spider):
            if isinstance(exception, self.EXCEPTIONS_TO_RETRY) and not request.meta.get('dont_retry', False):
                # 删除该代理
                #self.delete_proxy(request.meta.get('proxy', False))
                time.sleep(random.randint(3, 5))
                print('2中间件处 发现请求异常,需要重复请求!')
    
                return self._retry(request, exception, spider)
                
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 相思入骨 普通会员 1楼
      { "error": "Failed to generate content." }
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部