如何使用Python bs4查找嵌套div内a标签并提取acckey值
BeautifulSoup嵌套div查找提取acckey属性实现方案
核心逻辑
按照HTML嵌套层级匹配目标标签即可,支持逐层find定位,也支持CSS选择器一步匹配,两种方式都可以稳定拿到目标属性值。
前置准备
确保已经安装beautifulsoup4,未安装的话先执行安装命令:pip install beautifulsoup4
完整实现代码
方式一:逐层定位(兼容性好,逻辑清晰)
按照外层div→中层result_digital div→目标a标签的顺序逐层查找,适合需要对每一层做判断的场景:
from bs4 import BeautifulSoup # 替换成你实际爬取到的HTML源码 html = """ <div class="data_record"> <div class="result_select"></div> <div class="result_level"></div> <div class="result_digital"> <a class="act_content_display" acckey="69c19f8552dfdccb526f4728cf4e5cb6" title="檢視詳目頁"> <span class="material-icons">picture_as_pdf</span> </a> </div> </div> """ soup = BeautifulSoup(html, "html.parser") # 逐层查找 outer_div = soup.find("div", class_="data_record") digital_div = outer_div.find("div", class_="result_digital") target_tag = digital_div.find("a", class_="act_content_display") # 提取acckey属性,用get方法在标签不存在时不会抛出异常 acckey = target_tag.get("acckey") print(acckey) # 输出结果:69c19f8552dfdccb526f4728cf4e5cb6
方式二:CSS选择器一步匹配(代码简洁)
确认选择器唯一的前提下,可以直接用select_one方法一步定位目标标签,代码更精简:
from bs4 import BeautifulSoup html = """ <div class="data_record"> <div class="result_select"></div> <div class="result_level"></div> <div class="result_digital"> <a class="act_content_display" acckey="69c19f8552dfdccb526f4728cf4e5cb6" title="檢視詳目頁"> <span class="material-icons">picture_as_pdf</span> </a> </div> </div> """ soup = BeautifulSoup(html, "html.parser") # 选择器语义:匹配class为data_record的div下,class为result_digital的div内部,class为act_content_display的a标签 target_tag = soup.select_one("div.data_record div.result_digital a.act_content_display") acckey = target_tag["acckey"] print(acckey) # 输出结果:69c19f8552dfdccb526f4728cf4e5cb6
批量提取场景说明
如果页面存在多个class为data_record的列表块,遍历所有外层块再逐个提取即可:
# 遍历所有data_record块 for outer_div in soup.find_all("div", class_="data_record"): digital_div = outer_div.find("div", class_="result_digital") # 跳过没有result_digital块的异常条目 if not digital_div: continue target_tag = digital_div.find("a", class_="act_content_display") if target_tag: acckey = target_tag.get("acckey") print(acckey)
注意点
- 取属性优先用
tag.get("属性名")的写法,目标标签不存在或者属性不存在时会返回None,不会直接抛出KeyError中断程序 - 没有安装lxml解析器的话,直接用Python内置的
html.parser即可满足解析需求,不需要额外安装依赖 - 用CSS选择器时如果有多个匹配结果,
select_one只会返回第一个匹配的标签,需要全部结果的话换成select()方法拿到列表再遍历即可
内容的提问来源于stack exchange,提问作者chino
相关产品推荐
相关产品推荐

