我已经构建了一个可以无限循环运行的scraper。它还在10多台AWS机器上使用代理池。我想让它像是一个IP点击X次然后它不应再被击中,到目前为止,我正在使用MySQL达到目的。问题是,如果所有代理完成配额,我怎样才能让它睡觉或延迟并在新的一天获得新生活。现在我做了以下但最终它终止了整个程序:
def parse():
if random_proxy == '': # ALL Proxies finished quota for the day
raise Exception('Proxy Not Found')
r = session.get(u, headers=headers, proxies={'https': proxy_url})
if __name__ == '__main__':
idx = 0
exception_string = ''
POOL_COUNT = 50
try:
if conn is not None:
links = get_links(conn, POOL_COUNT)
if conn.open:
conn.close()
with Pool(POOL_COUNT) as p:
result = p.map(parse, links)
except Exception as ex:
print('Main program exception')
答案 0 :(得分:1)
处理问题的一种非常简单的方法:
SLEEP_INTERVAL = 300 # 5 minutes
def parse():
random_proxy = get_random_proxy()
while not random_proxy:
# ALL Proxies finished quota for the day
time.sleep(SLEEP_INTERVAL)
random_proxy = get_random_proxy()
r = session.get(u, headers=headers, proxies={'https': proxy_url})
这将阻止您的工作人员,直到有新的代理人可用。