如何使用BeautifulSoup提取HTML中首个带src属性的tr标签
问题原因
你调用find()时没有限定标签类型,BeautifulSoup会按文档顺序遍历所有节点,返回第一个符合src属性匹配规则的节点。内层<source>节点在DOM树中位于<tr>内部,检索顺序更靠前,因此被优先返回。
解决方法
方案1:明确指定查找<tr>标签(推荐)
直接在find()的第一个参数传入要匹配的标签名,就能精准定位到外层的tr节点:
import re from bs4 import BeautifulSoup soup = BeautifulSoup(target, 'lxml') target_tr = soup.find('tr', src=re.compile(r'\.\w')) print(target_tr)
如果只需要输出tr的起始标签(不需要子内容和闭合标签),可以再加一步格式处理:
print(str(target_tr).split('>')[0] + '>')
方案2:过滤查找结果(仅作参考)
如果不确定目标标签名,也可以先查找所有带符合规则src属性的标签,再筛选父层级最高的节点:
all_match = soup.find_all(src=re.compile(r'\.\w')) # 取父层级最少的节点即为最外层匹配节点 target_tr = sorted(all_match, key=lambda x: len(list(x.parents)))[0] print(target_tr)
内容的提问来源于stack exchange,提问作者retr0327
相关产品推荐
相关产品推荐

