【问题标题】:How to restart session after n amount of requests have been made在发出 n 次请求后如何重新启动会话
【发布时间】:2021-08-24 19:45:46
【问题描述】:

我有一个脚本试图从网站上抓取数据。该网站在收到约 75 个请求后会阻止任何传入请求。我发现在 50 个请求后重置会话并休眠 30 秒似乎可以解决被阻塞的问题。现在我想继承 requests.Session 并按顺序修改它的行为,以便它在需要时自动重置会话。到目前为止,这是我的代码:

class Session(requests.Session):
    request_count_limit = 50

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.request_count = 0
    
    def get(self, url, **kwargs):
        if self.request_count == self.request_count_limit:
            self = Session.restart_session()
        response = super().get(url, **kwargs)
        self.request_count += 1
        return response
    
    @classmethod
    def restart_session(cls):
        print('Restarting Session, Sleeping For 20 seconds...')
        time.sleep(20)
        return cls()

但是,上面的代码不起作用。原因是虽然我重新分配了 self 对象本身并没有改变,因此 request_count 也没有改变。任何帮助将不胜感激

【问题讨论】:

    标签: python oop python-requests


    【解决方案1】:

    赋值给self只是改变一个局部变量,它在方法之外绝对没有影响。您可以尝试实施 .new() 代替。

    看这里:Python Class: overwrite `self`

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 2017-06-27
      相关资源
      最近更新 更多