使用Python BeautifulSoup判断两段文本是否在同一class为div2的div中
BeautifulSoup 实现同div2标签内文本校验方法
前置依赖
首先安装需要的库:
pip install beautifulsoup4 lxml
实现思路
- 解析HTML结构后,先分别定位两段目标文本所在的节点,匹配时自动忽略文本前后的换行、空格等空白字符
- 对每个定位到的文本节点,向上递归查找父级标签,直到找到class为
div2的div标签,或到HTML根节点仍找不到则返回空 - 判断两段文本对应的父级div2标签是否为同一个节点,即可得出是否同属一个div2的结论
完整代码示例
from bs4 import BeautifulSoup def check_same_div2(html_str: str, text_a: str, text_b: str) -> bool: soup = BeautifulSoup(html_str, "lxml") # 内部工具方法:查找文本所属的最近的class为div2的父级div def get_div2_parent(target_text: str): # 匹配包含目标文本的所有节点,忽略前后空白 text_nodes = soup.find_all( string=lambda s: s and target_text in s.strip() ) if not text_nodes: return None # 遍历所有匹配到的文本节点,找第一个存在div2父级的 for node in text_nodes: div2_parent = node.find_parent("div", class_="div2") if div2_parent: return div2_parent return None div2_a = get_div2_parent(text_a) div2_b = get_div2_parent(text_b) # 两个都找到对应的div2,且是同一个节点才返回True return div2_a is not None and div2_b is not None and div2_a.is_(div2_b) # 测试用例,使用你提供的HTML test_html = """ <html> <head> <title>Product Page</title> </head> <body> <div class="div1"> <div class="div2"> <div class="divInside"> Recommended </div> <div class="above"> <div class="under"></div> </div> <div class="pct"></div> <div class="prod"> Product </div> </div> </div> </body> </html> """ # 测试判断"Recommended"和"Product"是否同属一个div2 print(check_same_div2(test_html, "Recommended", "Product")) # 输出结果为True
自定义调整说明
- 如果需要严格完全匹配文本(避免子串匹配错误),可以把匹配逻辑里的
target_text in s.strip()改成target_text == s.strip() - 如果页面中存在多段重复的目标文本,可以调整工具方法返回所有匹配到的div2父级,再判断两个文本的div2集合是否有交集
内容的提问来源于stack exchange,提问作者Kiren78
相关产品推荐
相关产品推荐

