我有一个脚本,试图从网站上抓取数据。该网站在收到约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
也没有改变。任何帮助都将不胜感激
赋值给self只是改变一个局部变量,它在方法之外绝对没有效果。您可以尝试实施。新的()
看这里:Python Class: overwrite `self`
相关问题 更多 >
编程相关推荐