You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python BeautifulSoup提取div内h4/p标签生成DataFrame结构化表格

Python BeautifulSoup 无表格HTML结构化爬取实现方案

前置依赖安装

在终端执行以下命令安装所需库:

pip install beautifulsoup4 requests pandas
  • beautifulsoup4:HTML解析与元素提取核心库
  • requests:用于拉取在线网页的HTML内容,仅处理本地HTML文件时可不用安装
  • pandas:用于快速组装、输出和保存结构化表格,也可根据需求替换为其他表格处理库

实现逻辑说明

核心处理流程如下:

  • 加载HTML内容,支持在线爬取或本地文件读取
  • 定位所有class属性为ah-content的目标div块
  • 遍历每个div块,提取内部<h4>标签文本作为Name字段
  • 按DOM顺序提取div下所有<p>标签的文本,依次匹配Address、Address2、Phone字段
  • 增加空值兼容逻辑,避免个别块标签缺失导致程序中断
  • 组装所有提取结果为结构化表格,支持打印预览或导出为文件

完整可运行代码

from bs4 import BeautifulSoup
import requests
import pandas as pd

# ---------- 1. 加载HTML内容 ----------
# 在线页面爬取模式:替换为实际目标URL
TARGET_URL = "替换为你要爬取的页面地址"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
response = requests.get(TARGET_URL, headers=headers)
response.encoding = "utf-8"
html_content = response.text

# 本地文件读取模式:如果处理本地HTML,注释掉上面的爬取代码,放开下面这段
# with open("your_local_file.html", "r", encoding="utf-8") as f:
#     html_content = f.read()

# ---------- 2. 解析提取数据 ----------
soup = BeautifulSoup(html_content, "html.parser")
# 定位所有目标内容块
content_blocks = soup.find_all("div", class_="ah-content")
structured_data = []

for block in content_blocks:
    # 提取Name字段
    name_tag = block.find("h4")
    name = name_tag.get_text(strip=True) if name_tag else ""
    
    # 提取所有p标签文本
    p_tags = block.find_all("p")
    p_content_list = [tag.get_text(strip=True) for tag in p_tags]
    
    # 按顺序匹配字段,缺省值为空字符串
    address = p_content_list[0] if len(p_content_list) >= 1 else ""
    address2 = p_content_list[1] if len(p_content_list) >= 2 else ""
    phone = p_content_list[2] if len(p_content_list) >= 3 else ""
    
    structured_data.append({
        "Name": name,
        "Address": address,
        "Address2": address2,
        "Phone": phone
    })

# ---------- 3. 输出表格结果 ----------
result_df = pd.DataFrame(structured_data)
# 控制台打印表格预览
print(result_df)
# 导出为CSV文件,用Excel打开不会乱码
# result_df.to_csv("crawl_result.csv", index=False, encoding="utf-8-sig")

代码运行后输出的表格结构完全匹配需求,示例输出如下:

Name      Address                 Address2       Phone
0  XYZ Community  123 Street  Atlanta, Georgia, 12345  1234567890

注意事项

  • 你提供的示例HTML中<div class='ah-content'标签缺少闭合的>,实际页面如果存在这类语法小问题,BeautifulSoup自带的容错解析机制一般可以自动修正,不影响提取结果
  • 如果页面是动态渲染的(内容由JS加载,直接请求拿到的HTML里没有目标div块),可以把requests替换成selenium或者playwright拿到渲染后的HTML,后续解析逻辑完全一致
  • 代码默认按p标签的出现顺序匹配字段,如果实际页面中p标签顺序有变动,可以根据文本特征(比如手机号为数字串、地址包含行政区划关键词等)做二次判断匹配

内容的提问来源于stack exchange,提问作者Learner27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:51:45