如何用Beautiful Soup获取指定TD后的目标span文本?
使用Beautiful Soup根据指定TD内容获取目标Span文本
步骤说明与代码示例
假设你已经有了目标HTML内容,以下是具体实现方法:
- 导入BeautifulSoup并解析HTML
from bs4 import BeautifulSoup # 你的目标HTML内容 html = ''' <tr class="even"> <td>**keyword** </td> <td class="separator"></td> <td> <span title="blablabla" class="data-siloing">**Text I want**</span> </td> </tr> ''' # 解析HTML soup = BeautifulSoup(html, 'html.parser')
- 定位包含指定内容的TD标签
用带lambda的find方法匹配TD,避免因文本前后空格导致匹配失败:
# 匹配内容包含**keyword**的TD target_td = soup.find('td', string=lambda text: text and '**keyword**' in text.strip())
- 获取后续TD中的目标Span文本
方法一:鲁棒性更强(适配结构可能变化的情况)
遍历目标TD的后续兄弟节点,跳过空白节点后找到包含指定class的span:
if target_td: for sibling in target_td.next_siblings: # 只处理<td>标签节点,跳过换行、空格等空白节点 if sibling.name == 'td': target_span = sibling.find('span', class_='data-siloing') if target_span: # 输出去除前后空格的文本 print(target_span.get_text(strip=True)) break
方法二:高效简洁(适用于HTML结构固定的情况)
如果确定目标TD后隔一个separator TD就是目标TD,可以直接通过find_next_sibling定位:
if target_td: # 跳过中间的separator TD,定位到下一个TD target_content_td = target_td.find_next_sibling('td').find_next_sibling('td') target_span = target_content_td.find('span', class_='data-siloing') if target_span: print(target_span.get_text(strip=True))
关键注意点
- 匹配TD文本时,一定要处理前后空格,否则可能因文本带空格导致匹配失败。
- 遍历兄弟节点时,要过滤掉非标签类型的空白节点(比如换行符、空格)。
内容的提问来源于stack exchange,提问作者steve figueras
相关产品推荐
相关产品推荐

