如何通过标签与特定属性在BeautifulSoup中查找元素并提取数据
问题解决:提取HTML指定元素信息
目标HTML结构
<main> <div id="rows"> <p data-name="First Element"> <a target="_blank" href="localhost"> <strong>First Element</strong> </a> <strong class="date-field" data-date="2016-06-27">6 years</strong> </p> <p data-name="Second Element"> <a target="_blank" href="localhost"> <strong>Second Element</strong> </a> <strong class="date-field" data-date="2016-06-27">6 years</strong> </p> </div> </main>
提取需求
- 查找所有带有
data-name属性的<p>元素; - 对每个
<p>元素,选中带有data-date属性的<strong>标签; - 提取
<a>标签的href属性以及上述<strong>标签的内容。
现有代码片段
from bs4 import BeautifulSoup file = open('index.html', 'r') file_text = file.read() soup = BeautifulSoup(file_text, "html.parser") results = soup.find("main").find(id="rows")
完整实现代码
基于现有代码补充逻辑,完成需求:
from bs4 import BeautifulSoup # 读取HTML文件(用with语句自动关闭文件更安全) with open('index.html', 'r') as file: file_text = file.read() soup = BeautifulSoup(file_text, "html.parser") # 定位到rows容器 rows_container = soup.find("main").find(id="rows") # 1. 筛选所有带data-name属性的p元素 p_elements = rows_container.find_all("p", attrs={"data-name": True}) # 遍历提取目标信息 extracted_data = [] for p in p_elements: # 2. 获取当前p下带data-date属性的strong标签 date_strong = p.find("strong", attrs={"data-date": True}) # 3. 提取a标签的href属性 a_href = p.find("a")["href"] # 提取strong标签的文本内容(strip=True去除前后空白) date_content = date_strong.get_text(strip=True) extracted_data.append({ "链接地址": a_href, "日期文本": date_content }) # 输出提取结果示例 for item in extracted_data: print(f"{item['链接地址']} | {item['日期文本']}")
代码说明
find_all("p", attrs={"data-name": True})精准匹配带data-name属性的<p>元素;- 对每个
<p>元素,通过find("strong", attrs={"data-date": True})定位目标日期标签; - 用
["href"]直接获取<a>标签的属性值,get_text(strip=True)清理文本冗余空白; - 用字典列表存储结果,方便后续批量处理或导出。
内容的提问来源于stack exchange,提问作者Mustafa Poya
相关产品推荐
相关产品推荐

