使用BeautifulSoup循环提取符合指定class条件的节点下a标签内文本
实现方案
我们的筛选逻辑为:先定位所有class属性为ELEMENT4的div节点,再校验该节点下是否存在class属性为ELEMENT5的svg子节点,满足两个条件后即可提取对应节点下的目标TEXT文本。
完整代码示例
from bs4 import BeautifulSoup # 此处替换为你实际获取的HTML源码 html_content = ''' <div class="ELEMENT1"> <div class="ELEMENT2"> <div class="ELEMENT3">valeur1</div> <div class="ELEMENT4"> <svg class="ELEMENT5 "> <a href="ELEMENT6" target="ELEMENT7" class="ELEMENT8"> <div>TEXT</div> ''' # 解析HTML soup = BeautifulSoup(html_content, 'html.parser') # 循环筛选符合条件的节点 for elem4_div in soup.find_all('div', class_='ELEMENT4'): # 校验当前ELEMENT4 div下是否存在ELEMENT5类的svg if elem4_div.find('svg', class_='ELEMENT5'): # 提取目标文本,strip=True会自动去除首尾空白字符 target_text = elem4_div.find('a').find('div').get_text(strip=True) # 此处可以替换为你需要的后续处理逻辑 print(target_text)
补充说明
- 如果a标签的class属性固定为ELEMENT8,也可以把提取文本的那行替换为
target_text = elem4_div.find('a', class_='ELEMENT8').find('div').get_text(strip=True),定位精度更高 - BeautifulSoup的
class_参数默认支持匹配多class属性中的单个值,你给出的示例中svg的class为ELEMENT5(末尾带空格),该写法依然可以正常匹配
内容的提问来源于stack exchange,提问作者eddy113
相关产品推荐
相关产品推荐

