如何在发出n个请求后重新启动会话

2024-03-28 15:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,试图从网站上抓取数据。该网站在收到约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也没有改变。任何帮助都将不胜感激