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

如何用Python的BeautifulSoup提取带属性span标签的文本?

问题分析与解决

你的代码返回None是因为选择器写法错误:attrs='data-v-4a598ac2'的用法不符合BeautifulSoup的要求,无法正确匹配带有该属性的<span>元素。另外,你需要提取所有目标文本,应该用find_all而非仅返回单个元素的find。

修正步骤:

  1. 修正属性选择器:
    要匹配带有data-v-4a598ac2属性的<span>,可以用两种方式:

    • 字典形式的attrs参数:attrs={'data-v-4a598ac2': True}(匹配所有包含该属性的元素,不管属性值)
    • CSS选择器语法:span[data-v-4a598ac2](更简洁)
  2. 获取所有目标元素:
    使用find_all或select方法获取所有符合条件的<span>,而非仅第一个。

  3. 安全提取文本:
    遍历元素列表时,先判断元素是否存在,再调用.get_text()或.string,避免NoneType错误。

完整修正代码:

from bs4 import BeautifulSoup
import requests

url = "https://..."
headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
site = requests.get(url, headers=headers)
soup = BeautifulSoup(site.content, 'html.parser')

# 方法1:用attrs字典匹配所有带data-v-4a598ac2属性的span
spans = soup.find_all('span', attrs={'data-v-4a598ac2': True})

# 方法2:用CSS选择器(推荐,更简洁)
# spans = soup.select('span[data-v-4a598ac2]')

# 提取所有文本
for span in spans:
    # 安全获取文本,避免元素为空的情况
    text = span.get_text(strip=True) if span else ""
    if text:  # 过滤空文本
        print(text)

额外排查点:

如果修正后仍无法获取元素,可能是:

  • 页面内容是动态加载的(由JavaScript渲染),requests无法获取动态生成的HTML,此时需要改用Selenium或Playwright等工具模拟浏览器加载。
  • 目标元素位于<iframe>内,需要先切换到iframe再解析。
  • 请求的URL返回的内容和你提供的HTML结构不一致,可以先打印site.text查看实际返回的页面源码,确认目标元素是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:49:55