如何使用Python+Selenium爬取Goodreads上万条书评而不崩溃?

新手上路,请多包涵

通过python+selenium去爬取goodreads上一本书的评论,由于goodreads的评论是一页加载所有内容,不断点load more,就不断在该页面增加内容,在加载到3000-5000条评论时,页面就会崩溃,用的edge,内存设置的无限制。这种情况应该怎么做才行。

希望能获取到完整的上万条评论。
试过减少页面操作的次数、每次加载的间隔设置为5s。但到了3000条以上时仍有概率崩溃。

阅读 227
avatarAI BotBETA

回答

要爬取Goodreads上万条书评而不崩溃,你可以尝试以下几种策略来优化你的Selenium脚本:

  1. 使用无头浏览器
    使用无头浏览器(如Chrome Headless或Firefox Headless)可以减少内存和CPU的使用,从而增加脚本的稳定性。

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    driver = webdriver.Chrome(options=chrome_options)
  2. 增加页面加载等待时间
    虽然你已经尝试了每次加载后等待5秒,但可以尝试增加等待时间,或者使用更智能的等待条件(如WebDriverWait和expected_conditions)。

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(driver, 10)  # 增加等待时间到10秒
    # 示例等待条件
    element = wait.until(EC.presence_of_element_located((By.ID, "some-id")))
  3. 分批处理评论
    不要一次性加载所有评论,而是分批加载并处理。例如,每次加载500条评论,处理完后再加载下一批。
  4. 使用Selenium Grid或分布式处理
    如果单台机器无法处理大量数据,可以考虑使用Selenium Grid将任务分发到多台机器上执行。
  5. 调整Edge浏览器的设置
    虽然你提到内存设置无限制,但Edge浏览器可能还有其他限制导致崩溃。可以尝试使用Chrome或其他浏览器,或者调整Edge的具体设置(如禁用某些扩展、清理缓存等)。
  6. 捕获异常并重新尝试
    在你的脚本中加入异常捕获机制,当发生崩溃时自动重新尝试加载评论。

    try:
        # 加载评论的代码
    except Exception as e:
        print(f"发生错误: {e}")
        # 重新加载页面或执行其他恢复操作
        driver.refresh()  # 或者其他恢复策略
  7. 检查Goodreads的反爬虫机制
    确保你的脚本没有触发Goodreads的反爬虫机制。如果Goodreads检测到你的爬虫行为,可能会故意导致页面崩溃或返回错误数据。

通过结合上述策略,你应该能够更稳定地爬取Goodreads上的大量书评。不过,请注意遵守Goodreads的使用条款和法律法规,避免过度爬取或滥用数据。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏