如何使用Selenium打开链接列表并抓取路透社文章文本内容
问题原因
- 变量未初始化:代码直接对
full_text执行append操作,没有预先定义full_text = [],首次运行会直接报错,即便之前有定义也可能因为旧值被清空导致返回空列表。 - XPath定位失效:你使用的绝对路径XPath稳定性极差,路透社文章页面DOM结构更新后该路径已经完全匹配不到任何段落元素,这是返回空列表的核心原因。
- 硬等待不可靠:
time.sleep(5)属于强制固定等待,若网络波动导致5秒内正文还未完成渲染,此时查找元素也会返回空结果。
修复方案
建议改用相对路径XPath定位正文,同时用Selenium显式等待替代硬等待,兼容不同网络环境下的加载场景,完整修改后代码如下:
# 提前导入依赖模块(如果之前没导入的话需要加) from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化存储正文的列表 full_text = [] for article in article_links: driver.get(article) # 显式等待最多10秒,直到正文段落加载完成 wait = WebDriverWait(driver, 10) try: # 等待正文容器加载完成再执行提取 wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'article-body__content')]/p"))) # 提取所有正文段落 for p in driver.find_elements(By.XPATH, "//div[contains(@class, 'article-body__content')]/p"): full_text.append(p.text) except: # 单个链接提取失败跳过,避免整个程序中断 print(f"链接{article}提取失败,已跳过") continue # 输出最终结果 print(full_text)
注:如果你的Selenium版本低于4.0,也可以把find_elements(By.XPATH, xxx)换回原来的find_elements_by_xpath(xxx)写法,同样可正常运行。
内容的提问来源于stack exchange,提问作者jonimoni
相关产品推荐
相关产品推荐

