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

使用bs4爬取marketwatch.com时报NoneType错误问题咨询

BeautifulSoup爬取marketwatch.com出现NoneType错误问题解析

错误本质

你当前代码抛出NoneType错误的直接原因是:article.find('span', class_='article__timestamp')这一步返回了None,后续直接对None执行['data-est']的取值操作,违反Python语法规则就会触发报错。

找不到目标span标签的常见原因

  • 部分article__content节点结构不完整:你遍历的所有div.article__content节点里,可能混杂了广告、专题推荐、空占位模块等非标准新闻卡片,这类卡片本身就没有article__timestamp时间戳节点,自然查找失败。
  • 页面内容为动态渲染:MarketWatch的部分页面内容是通过JavaScript异步加载渲染的,你直接请求页面拿到的初始HTML里并不包含动态生成的时间戳节点,BeautifulSoup只能解析静态HTML,无法识别JS插入的元素。
  • 反爬机制触发:如果请求没有携带符合要求的User-Agent等请求头,网站会返回简化版页面、拦截提示页,页面结构和你预期的正常结构完全不一致,也会找不到目标节点。
  • 页面结构迭代:网站可能随时更新了前端类名、节点层级,你参考的旧结构和当前线上实际结构不匹配。

修复方案

for article in soup.find_all('div', class_='article__content'):
    # 先查找时间戳节点
    timestamp_ele = article.find('span', class_='article__timestamp')
    # 先判断节点是否存在,再取值
    if timestamp_ele:
        # 用get方法取属性,哪怕属性不存在也不会报错
        date = timestamp_ele.get('data-est')
        print(date)
    # 调试用:可以打印异常节点的结构,排查是哪类卡片没有时间戳
    # else:
    #     print(article.prettify())

如果确认是动态渲染导致的找不到节点,可以改用Selenium、Playwright等支持JS渲染的工具爬取,或者抓接口直接请求时间戳对应的后端接口数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:21:03