如何用BeautifulSoup结合for循环获取无类名/ID的嵌套div内容?
用BeautifulSoup结合for循环提取目标父div
你可以通过遍历顶层父div,检查其子div的文本内容是否包含目标关键词来实现。以下是具体的代码实现:
步骤1:导入依赖并解析HTML
from bs4 import BeautifulSoup # 你的目标HTML内容(实际场景中可替换为requests.get获取的响应内容) html = """ <div> <div>Toy Shop</div> <div>#03-538</div> <div>Fun place for kids</div> </div> <div> <div>car Shop</div> <div>#01-342</div> <div>carss</div> </div> """ # 解析HTML soup = BeautifulSoup(html, "html.parser")
步骤2:用for循环筛选目标div
# 定义需要匹配的目标文本 targets = ["carss", "Fun place for kids"] result_divs = [] # 遍历所有顶层父div(recursive=False只获取直接子节点的div) for parent_div in soup.find_all("div", recursive=False): # 提取当前父div下所有子div的文本(去除空白字符) child_texts = [child.get_text(strip=True) for child in parent_div.find_all("div")] # 检查是否包含任一目标文本 for text in targets: if text in child_texts: result_divs.append(parent_div) break # 匹配到后跳出当前循环,避免重复添加 # 输出结果 for idx, div in enumerate(result_divs, 1): print(f"第{idx}个目标div内容:") print(div.prettify())
代码说明
recursive=False:限制只查找当前节点的直接子div,避免遍历深层嵌套的div,精准定位你需要的父容器。get_text(strip=True):去除文本前后的换行、空格等空白字符,确保匹配的准确性。- 双层循环逻辑:外层遍历所有父div,内层检查父div下的子div是否包含目标文本,符合条件就将父div加入结果列表。
内容的提问来源于stack exchange,提问作者Bee
相关产品推荐
相关产品推荐

