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
相关产品推荐
相关产品推荐

