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

无法获取<span>标签及表格内span文本问题求助(附Python代码)

解决无法获取标签文本的问题

我来帮你排查下代码里的核心问题,这两个点是导致你拿不到文本的关键:

问题1:findAll返回的是元素列表,不能直接调用find_all

你用soup.findAll("div", {"class" : "iw_component","id":"c1417094965154"})得到的table是一个元素列表(哪怕页面只有一个符合条件的div),直接对列表调用find_all()会触发AttributeError。你需要要么遍历这个列表,要么如果确定页面只有一个目标div,改用find()代替findAll()来获取单个元素。

问题2:recursive=False限制了查找范围

当你设置recursive=False时,BeautifulSoup只会查找当前元素的直接子节点。而表格内的<span>肯定是嵌套在<table>、<tr>、<td>这些标签里面的,并不是目标div的直接子元素,所以用这个参数会完全漏掉表格里的span。默认情况下recursive=True,会递归查找所有层级的子元素,这才是你需要的。

修改后的代码示例

情况1:页面只有一个目标div

from bs4 import BeautifulSoup
import urllib2

url1 = "url"
content1 = urllib2.urlopen(url1).read()
soup = BeautifulSoup(content1,"lxml")
# 用find()获取单个目标div元素
target_div = soup.find("div", {"class" : "iw_component","id":"c1417094965154"})
# 递归查找所有span,包括表格内的嵌套span
all_spans = target_div.find_all('span')
for span in all_spans:
    print(span.text)

情况2:页面有多个符合条件的div

from bs4 import BeautifulSoup
import urllib2

url1 = "url"
content1 = urllib2.urlopen(url1).read()
soup = BeautifulSoup(content1,"lxml")
# 遍历每个符合条件的div
for target_div in soup.findAll("div", {"class" : "iw_component","id":"c1417094965154"}):
    all_spans = target_div.find_all('span')
    for span in all_spans:
        print(span.text)

如果只想提取表格内的span,可以先定位到表格再查找:

# 在目标div内先找到表格元素
table = target_div.find('table')
if table:
    table_spans = table.find_all('span')
    for span in table_spans:
        print(span.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:56:24