网络抓取变通方法时发生MaxRetryError-Python,硒

时间:2020-06-30 22:16:42

标签: python selenium web-scraping

我在尝试解决如何网络爬虫向同一网站发出多个请求时遇到了很多困难。我必须从网站上从网上抓取3000种产品。这意味着向该服务器发出各种请求(例如搜索产品,单击产品,返回首页)3000次。 我声明我正在使用Selenium。如果仅启动Firefox Webdriver的一个实例,则不会收到MaxRetryError,但是随着搜索的进行,我的webdriver变得越来越慢,并且当程序达到大约一半的搜索时,它将停止响应。我在一些论坛上进行了查找,发现这样做是为了解决一些浏览器内存问题。因此,我尝试每n秒退出并重新实例化webdriver(我尝试了100、200和300秒),但是当我这样做时,由于使用同一会话对该URL的请求过多,我得到了MaxRetryError。 然后,我尝试在发生异常但无法正常工作时让程序休眠一分钟(我只能进行另一次搜索,然后再次引发异常,依此类推)。 我想知道是否存在针对此类问题的解决方法。 它可能正在使用另一个库,一种动态更改IP或会话的方法或类似的方法。 附言如果可能的话,我宁愿继续使用硒。

1 个答案:

答案 0 :(得分:0)

如果服务器确定来自您的客户端的高请求率,通常会引发此错误。

如前所述,服务器禁止您的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,