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

如何用BeautifulSoup抓取无id、class属性的<span>标签数据?

解决方案

你遇到的问题是find("span", class_=False, id=False)会匹配到最外层的<span>,而不是你需要的内部子<span>。以下是几种可行的解决办法:

方法1:使用CSS选择器定位直接子元素

利用CSS选择器span > span直接选中外层<span>的直接子<span>,精准获取目标标签:

from bs4 import BeautifulSoup

html = '''
<span>  
  <span>2 in Amazon Launchpad (<a href="/-/en/gp/bestsellers/boost/ref=pd_zg_ts_boost">See Top 100 in Amazon Launchpad</a>)</span> 
<br> 
  <span>1 in <a href="/-/en/gp/bestsellers/drugstore/2860173031/ref=pd_zg_hrsr_drugstore">Forehead Thermometers</a></span> 
<br>  
  <span>1 in <a href="/-/en/gp/bestsellers/boost/22130220031/ref=pd_zg_hrsr_boost">Amazon Launchpad Coupons</a></span> 
<br> 
</span>
'''
soup = BeautifulSoup(html, 'html.parser')
target_spans = soup.select("span > span")
for span in target_spans:
    print(span.get_text(strip=True))

方法2:先定位外层容器,再遍历子元素

先找到最外层的<span>,再从中提取所有子<span>元素:

outer_span = soup.find("span")
target_spans = outer_span.find_all("span")
for span in target_spans:
    print(span.get_text(strip=True))

方法3:通过内容特征筛选

如果目标<span>都包含特定文本(比如示例中的"in"),可以结合文本内容进一步过滤:

target_spans = soup.find_all("span", string=lambda text: text and "in" in text.strip())
for span in target_spans:
    print(span.get_text(strip=True))

这些方法都能绕过无id/class的限制,精准抓取你需要的<span>内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:37:44