You need to enable JavaScript to run this app. 使用BeautifulSoup获取HTML元素属性时find返回None该如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup获取HTML元素属性时find返回None该如何解决?

问题成因
  • URL拼接错误:你的代码里sitename = 'https://www.marketwatch.com/investing/stock/tsla' + stock_name,调用时传入的参数是tsla,最终拼接出的URL是https://www.marketwatch.com/investing/stock/tslatsla,属于无效地址,即使返回状态码200也是站点跳转后的通用页面,不存在你要的目标元素。
  • 元素查找条件不合理:你硬编码了channel属性的固定值作为查找条件,该属性值是不同股票对应的动态ID,会随股票代码变化,即使URL正确也匹配不到对应元素。
  • 缺少非空校验:没有对find方法的返回结果做判断,当元素不存在返回None时,直接对None做下标取值操作就会触发你遇到的TypeError。
解决方案

按以下步骤修改即可:

  1. 修复URL拼接逻辑,删除路径中硬编码的tsla,使用参数动态拼接路径:
sitename = f'https://www.marketwatch.com/investing/stock/{stock_name}'
  1. 更换更稳定的元素查找条件,使用固定的field属性代替动态的channel属性:
price_holder = soup.find("bg-quote", {"field": "Last"})
  1. 增加非空校验避免报错:
if price_holder:
    price = price_holder["data-last-raw"]
    print(price)
else:
    print("未找到目标价格元素")
  1. 若修改后依然找不到元素,说明目标元素是前端JavaScript动态渲染生成的,requests只能获取静态HTML源码,无法拿到动态渲染的内容,可改用Selenium、Playwright等支持浏览器渲染的工具爬取,或直接查找页面内嵌的JSON数据、对应数据接口提取价格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:06:01