如何用Python/BeautifulSoup从Span标签获取同级<td>标签文本
问题解决:获取指定span所在td的同级td文本
你的代码存在两个核心问题:
- 定位方向错误:
find_next_siblings('td')是在<span>的同级元素中查找,但<span>嵌套在<td>内部,它的同级没有任何<td>,必须先定位到<span>所在的父级<td>,再去查找这个<td>的同级元素。 - 结果集处理错误:
find_next_siblings返回的是多个元素的集合(列表),不能直接调用.text,需要遍历每个元素提取文本。
正确实现代码
import requests from bs4 import BeautifulSoup # 假设html是你获取到的目标HTML内容 html = """ <tr> <td> <span>EPS Actual</span> </td> <td>1.1</td> <td>2.2</td> <td>3.3</td> <td>4.4</td> </tr> """ soup = BeautifulSoup(html, 'lxml') # 1. 找到目标span target_span = soup.find('span', text='EPS Actual') # 2. 获取span所在的父td parent_td = target_span.parent # 3. 获取该td的所有同级后续td标签 sibling_tds = parent_td.find_next_siblings('td') # 4. 遍历提取每个td的文本,整理成列表 eps_values = [td.get_text(strip=True) for td in sibling_tds] print(eps_values) # 输出: ['1.1', '2.2', '3.3', '4.4']
简化写法
也可以把步骤合并成一行:
eps_values = [td.get_text(strip=True) for td in soup.find('span', text='EPS Actual').parent.find_next_siblings('td')]
说明:get_text(strip=True)会自动去除文本前后的空白字符,避免换行、空格干扰。
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

