通过python+selenium去爬取goodreads上一本书的评论,由于goodreads的评论是一页加载所有内容,不断点load more,就不断在该页面增加内容,在加载到3000-5000条评论时,页面就会崩溃,用的edge,内存设置的无限制。这种情况应该怎么做才行。
希望能获取到完整的上万条评论。
试过减少页面操作的次数、每次加载的间隔设置为5s。但到了3000条以上时仍有概率崩溃。
通过python+selenium去爬取goodreads上一本书的评论,由于goodreads的评论是一页加载所有内容,不断点load more,就不断在该页面增加内容,在加载到3000-5000条评论时,页面就会崩溃,用的edge,内存设置的无限制。这种情况应该怎么做才行。
希望能获取到完整的上万条评论。
试过减少页面操作的次数、每次加载的间隔设置为5s。但到了3000条以上时仍有概率崩溃。
要爬取Goodreads上万条书评而不崩溃,你可以尝试以下几种策略来优化你的Selenium脚本:
使用无头浏览器:
使用无头浏览器(如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)
增加页面加载等待时间:
虽然你已经尝试了每次加载后等待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")))
捕获异常并重新尝试:
在你的脚本中加入异常捕获机制,当发生崩溃时自动重新尝试加载评论。
try:
# 加载评论的代码
except Exception as e:
print(f"发生错误: {e}")
# 重新加载页面或执行其他恢复操作
driver.refresh() # 或者其他恢复策略
通过结合上述策略,你应该能够更稳定地爬取Goodreads上的大量书评。不过,请注意遵守Goodreads的使用条款和法律法规,避免过度爬取或滥用数据。
5 回答5.7k 阅读✓ 已解决
1 回答9.6k 阅读✓ 已解决
2 回答5.2k 阅读✓ 已解决
2 回答3.6k 阅读✓ 已解决
3 回答4.5k 阅读
2 回答2.5k 阅读✓ 已解决
2 回答1.6k 阅读✓ 已解决