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

Selenium循环爬取BBC新闻时结果重复累加问题求助

问题解决:爬取BBC新闻时结果重复累加

你的代码里存在一个关键问题:获取新闻标题的XPath没有使用相对路径,导致每次循环都从整个页面根节点查找,重复抓取同一个标题,最终列表里的内容不断累加重复。

问题根源

  • 获取标题的代码:search.find_element(By.XPATH, "//h3[@class='gs-c-promo-heading__title gel-pica-bold nw-o-link-split__text']")
    这里的//是从整个文档根节点开始搜索,所以每次循环都会找到页面中第一个符合条件的标题,重复添加到title列表里。
  • 而获取链接的XPath前面加了.(.//a[...]),是相对当前search元素(单个新闻块)的子元素搜索,所以链接是正确的。

修正后的代码

news_search = driver.find_elements(By.XPATH, "//div[@class='gs-c-promo gs-t-News nw-c-promo gs-o-faux-block-link gs-u-pb gs-u-pb+@m nw-p-default gs-c-promo--inline gs-c-promo--stacked@xl gs-c-promo--flex']")
title = []
link = []

for search in news_search:
    # 给标题XPath添加.,改为相对当前新闻块的查找
    title.append(search.find_element(By.XPATH, ".//h3[@class='gs-c-promo-heading__title gel-pica-bold nw-o-link-split__text']").text)
    link.append(search.find_element(By.XPATH, ".//a[@class='gs-c-promo-heading gs-o-faux-block-link__overlay-link gel-pica-bold nw-o-link-split__anchor']").get_attribute('href'))
    # 打印当前单个新闻的标题和链接,避免输出整个重复列表
    print(f'Title:{title[-1]}\nLink:{link[-1]}')
driver.quit()

额外优化

你原来的print语句是输出整个title和link列表,所以每次循环都会显示之前所有内容,视觉上也会显得重复。改成打印列表最后一个元素(title[-1]和link[-1]),只输出当前抓取的单条新闻信息,结果更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:54:30