【问题标题】:MaxRetryError while web scraping workaround - Python, Selenium网络抓取解决方法时出现 MaxRetryError - Python,Selenium
【发布时间】:2020-10-21 07:37:07
【问题描述】:
我很难弄清楚如何对同一个网站发出多个请求。我必须从网站上抓取 3000 种产品。这意味着向该服务器发出各种请求(例如搜索产品、单击产品、返回主页)3000 次。
我声明我正在使用 Selenium。如果我只启动我的 Firefox webdriver 的一个实例,我不会收到 MaxRetryError,但随着搜索的进行,我的 webdriver 会变得越来越慢,并且当程序达到大约一半的搜索时它会停止响应。我在一些论坛上查找了它,发现它是针对某些浏览器内存问题的。所以我尝试每隔 n 秒退出并重新实例化 webdriver(我尝试了 100、200 和 300 秒),但是当我这样做时,由于使用同一会话对该 url 的请求太多,我得到了 MaxRetryError。
然后,我尝试在发生异常时让程序休眠一分钟,但没有奏效(我只能进行另一次搜索,然后再次抛出异常,依此类推)。
我想知道这些问题是否有任何解决方法。
它可能正在使用另一个库,一种动态更改 IP 或会话的方法或类似的东西。
附言如果可能的话,我宁愿继续使用 selenium。
【问题讨论】:
标签:
python
selenium
web-scraping
【解决方案1】:
如果服务器确定来自您的客户端的请求率很高,通常会引发此错误。
正如您所提到的,服务器禁止您的IP 发出进一步的请求,因此您可以使用一些可用的技术来解决这个问题。查看Zalenium 并查看here 了解其他一些可能的方法。
另一种可能(但繁琐)的方法是使用多个浏览器实例进行调用,例如,here 的回答说明了这一点。
urlArr = ['https://link1', 'https://link2', '...']
for url in urlArr:
chrome_options = Options()
chromedriver = webdriver.Chrome(executable_path='C:/Users/andre/Downloads/chromedriver_win32/chromedriver.exe', options=chrome_options)
with chromedriver as browser:
browser.get(url)
# your task
chromedriver.close() # will close only the current chrome window.
browser.quit() # should close all of the open windows,