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

如何限制Beautiful Soup仅从MarketWatch最新新闻标签提取信息?

解决MarketWatch最新新闻抓取范围问题

嘿,我帮你搞定这个问题!你的代码之所以会抓到非最新新闻区域的内容,是因为没有限定抓取的范围——直接在整个页面里搜索内容,自然会把其他区域的信息也带进来。咱们只需要先定位到最新新闻的专属容器,再在这个容器里提取标题和作者就可以了。

修改后的完整代码

from bs4 import BeautifulSoup
import urllib
import csv

# 打开目标页面
page = urllib.urlopen('https://www.marketwatch.com/newsviewer/')
soup = BeautifulSoup(page.read(), 'html.parser')

# 关键步骤:定位到最新新闻的专属容器,避免抓取其他区域内容
latest_news_container = soup.find('div', class_='newsviewer__items')

if latest_news_container:
    # 遍历容器内的所有新闻条目(每个条目对应一篇新闻)
    news_items = latest_news_container.find_all('div', class_='element--article')
    
    # 将提取的内容写入CSV文件
    with open('latest_marketwatch_news.csv', 'w', newline='') as csvfile:
        fieldnames = ['新闻标题', '作者']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        
        writer.writeheader()
        
        for item in news_items:
            # 提取新闻标题
            title_tag = item.find('h3', class_='article__headline').find('a')
            title = title_tag.get_text(strip=True) if title_tag else '无标题'
            
            # 提取作者信息
            author_tag = item.find('span', class_='article__author')
            author = author_tag.get_text(strip=True) if author_tag else '未知作者'
            
            writer.writerow({'新闻标题': title, '作者': author})
    print("最新新闻已成功提取并保存到CSV文件!")
else:
    print("未找到最新新闻容器,请检查页面结构是否有更新!")

代码说明

  • 限定抓取范围:通过soup.find('div', class_='newsviewer__items')定位到最新新闻的父容器,所有后续操作都只在这个容器内进行,彻底避免抓取其他区域的内容。
  • 精准定位元素:每个新闻条目都在class="element--article"的div里,标题和作者也有对应的专属class,确保提取的是正确内容。
  • 容错处理:加入了判断标签是否存在的逻辑,就算某篇新闻没有标题或作者,代码也不会报错,而是用默认值代替。

小提醒

网站的页面结构可能会随时更新,如果以后发现代码抓不到内容了,记得打开浏览器的开发者工具(F12),重新查看最新的容器class和元素标签哦~

内容的提问来源于stack exchange,提问作者A.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:13:51