如何基于两个标签和两个类提取指定单条HTML内容
精准提取指定td下的span元素
你的问题核心是未限制外层td的class范围,之前的代码仅筛选了span.cap(精确匹配类),所以会匹配到所有符合条件的span,不管它的父级td是什么类。以下是两种精准提取目标元素的方案:
方案1:分步定位(推荐,可读性强)
先定位到class为right的td标签,再在其内部筛选精确class为cap的span:
# 先找到目标td target_td = soup.find('td', class_='right') # 在td内精确匹配class为cap的span salary_span = target_td.find('span', class_=['cap']) # 若要获取文本内容 salary_text = salary_span.get_text()
注:BeautifulSoup中
class_=['cap']会精确匹配仅包含cap这一个类的元素,自动排除多类情况(比如cap info)。
方案2:单步lambda筛选
直接在lambda表达式中同时检查span本身和其父级td的条件:
salary_span = soup.find(lambda tag: tag.name == 'span' and tag.get('class') == ['cap'] and tag.parent.name == 'td' and tag.parent.get('class') == ['right'] )
两种方案都能精准提取到你需要的<span class="cap">$13,000,000</span>元素,避免匹配到第一个td里的span。
内容的提问来源于stack exchange,提问作者ElphiusMostafa
相关产品推荐
相关产品推荐

