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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    scrapy 重试请求 是否携带新的请求头和代理ip?
    19
    0

    scrapy设置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('3中间件处 发现有验证码,需要重复请求!')
                time.sleep(random.choice(range(6)))
                print('当前请求ip:', request.meta.get('proxy'))
                    
                return self._retry(request, response.body, spider) or response
    

    以上代码是否就是重复发起请求
    那么重复请求 是否携带随机UserAgent 和 新的代理IP?设置了重复请求的次数,每次返回结果依然有验证码。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 社会有形姐有样ゆ 普通会员 1楼

      Scrapy框架本身并不支持重试请求,它默认会使用全局的重试设置,每次请求都会尝试重新发送。如果你需要在请求中携带新的请求头和代理IP,你需要在settings.py文件中进行设置。

      如果你使用的是代理IP,你可以通过设置RETRY_URL参数来指定代理IP。例如:

      python RETRY_URL = "http://example.com"

      如果你需要在请求头中携带新的请求头,你需要在settings.py文件中进行设置。例如:

      python RETRY_URL = "http://example.com" headers = {"User-Agent": "Mozilla/5.0"}

      然后,你需要在你的爬虫代码中设置这些参数:

      ```python def spider(): # ...

      response = requests.get(RETRY_URL, headers=headers)
      # ...
      

      ```

      请注意,这些参数只会在你的请求被发送到重试URL时生效。如果你的请求没有被发送到重试URL,那么这些参数将不会被应用。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部