You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Selenium爬取路透社新闻链接对应的完整正文内容

问题说明
  • 需要提取路透社新闻链接的完整报道内容,示例链接:https://www.reuters.com/world/europe/navalny-allies-accuse-telegram-censorship-russian-election-2021-09-18/
  • 已实现Selenium代码爬取路透社个股页面的新闻链接,目前无法定位正文的正确XPath,且新闻正文拆分在多个<p>标签中,需要解决正文提取的问题。
现有代码
!pip install selenium
!apt-get update 
!apt install chromium-chromedriver

from selenium import webdriver
import time
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://www.reuters.com/companies/AAPL.O")
links=[]
i=0
try:
    while True:
        news = driver.find_elements_by_xpath("//div[@class='item']")
        driver.execute_script("arguments[0].scrollIntoView(true);", news[i])
        if news[i].find_element_by_tag_name("time").get_attribute("innerText") == "a year ago":
            break
        links.append(news[i].find_element_by_tag_name("a").get_attribute("href"))
        i += 1
        time.sleep(.5)
except:
    pass

driver.quit()
正文提取方案

路透社新闻页的正文所有<p>标签都统一嵌套在带article-body__content__前缀的class的div容器中,你可以直接定位该容器后批量获取所有p标签的内容拼接即可,不需要单独给每个p写XPath。
在现有代码获取完links列表后,补充以下代码即可实现正文提取:

def get_reuters_content(url):
    driver.get(url)
    time.sleep(1)
    try:
        # 匹配正文外层容器,用contains避免class后缀动态变化导致定位失效
        content_wrapper = driver.find_element_by_xpath("//div[contains(@class, 'article-body__content__')]")
        # 获取容器下所有p标签
        p_tags = content_wrapper.find_elements_by_tag_name("p")
        # 拼接所有非空的p标签文本
        full_text = "\n".join([tag.text.strip() for tag in p_tags if tag.text.strip()])
        return full_text
    except:
        return "正文提取失败"

# 重新初始化driver用于提取正文
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
driver.implicitly_wait(10)

# 遍历所有链接提取正文
news_result = []
for link in links:
    news_result.append({
        "url": link,
        "content": get_reuters_content(link)
    })
    time.sleep(0.5)

driver.quit()

# 打印结果测试
for news in news_result:
    print(f"新闻链接:{news['url']}")
    print(f"新闻正文:\n{news['content']}")
    print("-"*80)

注意事项

  • 如果遇到页面加载慢的情况,可以把time.sleep(1)的等待时长调长,或者替换为显式等待逻辑
  • 遇到付费墙拦截的新闻,该方法无法提取到完整正文,属于正常情况

内容的提问来源于stack exchange,提问作者huy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:45:03