【问题标题】: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,

【讨论】:

    猜你喜欢
    • 2021-08-11
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2021-10-10
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多