讲师中心 微信公众号
AI工具推荐 视频效率加速

如何精准匹配网页中标题与对应段落进行结构化爬取

星婷小哥_2838

星婷小哥_2838

发布时间:2026-07-21 09:45:31

|

517人浏览过

|

来源于php中文网

原创

如何精准匹配网页中标题与对应段落进行结构化爬取

本文讲解如何使用 Selenium 正确抓取具有统一类名的标题(.chunk-title)和段落(.p0),通过 DOM 层级关系实现“一标题配其下所有段落”的结构化输出,避免全局重复匹配问题。

本文讲解如何使用 selenium 正确抓取具有统一类名的标题(`.chunk-title`)和段落(`.p0`),通过 dom 层级关系实现“一标题配其下所有段落”的结构化输出,避免全局重复匹配问题。

在网页爬取实践中,常见一类结构:多个标题(如 <div class="chunk-title">)与多个段落(如 <p class="p0">)分别集中存在于同级容器中,但彼此逻辑归属并非简单顺序一一对应——而是按 DOM 嵌套层级组织。例如目标页面中,每个 chunk 容器(.chunks > li)内包含一个 .chunk-title 和若干 .chunk-content > p.p0,这才是语义上“标题-内容”的真实配对单元。

原代码的问题在于:

  • 使用 driver.find_elements(By.CLASS_NAME, "chunks") 获取的是顶层容器列表,但后续却在整个页面范围内重复查找所有 .chunk-title 和所有 <p>,导致标题与段落交叉错配;
  • 未利用 HTML 的嵌套结构,而是将标题与段落作为两个独立集合暴力循环,自然产生“每个标题后打印全部段落”的错误结果。

✅ 正确解法是:逐个定位每个逻辑区块(chunk),再在其内部范围查找对应的标题与段落。关键在于使用相对 XPath 或 CSS 选择器(如 .find_element() 配合 . 表示当前节点上下文):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()  # Selenium 4.6+ 自动管理驱动,无需手动指定路径
driver.get("https://library.municode.com/az/avondale/codes/code_of_ordinances?nodeId=CD_ORD_CH1GEPR")
driver.maximize_window()

# 等待主内容加载完成
wait = WebDriverWait(driver, 15)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "ul.chunks")))

# 定位所有 chunk 列表项(每个 li 是一个独立的标题+内容单元)
chunks = driver.find_elements(By.CSS_SELECTOR, "ul.chunks > li")

with open("avondale_ordinances.txt", "w", encoding="utf-8") as f:
    for i, chunk in enumerate(chunks, 1):
        try:
            # 在当前 chunk 内查找标题
            title_elem = chunk.find_element(By.CLASS_NAME, "chunk-title")
            title_text = title_elem.text.strip()

            # 在当前 chunk 内查找所有段落(注意:p 元素位于 .chunk-content 内)
            para_elems = chunk.find_elements(By.CSS_SELECTOR, ".chunk-content p.p0")
            para_texts = [p.text.strip() for p in para_elems if p.text.strip()]

            # 写入结构化内容
            f.write(f"--- Article {i} ---\n")
            f.write(f"{title_text}\n\n")
            for para in para_texts:
                f.write(f"{para}\n\n")
            f.write("-" * 50 + "\n\n")

            print(f"✓ Processed: {title_text[:50]}...")
        except Exception as e:
            print(f"⚠️  Skipped chunk {i}: {e}")
            continue

driver.quit()

? 关键要点说明:

Selenium 4.48.0
Selenium 4.48.0

Selenium 4.48.0 官方发布页下载,适合 WebDriver 浏览器自动化测试、Selenium Grid 分布式测试和多语言自动化脚本环境升级。

下载
  • chunk.find_element(...) 中的 . 表示从 chunk 这个 WebElement 开始搜索,确保作用域严格限定在当前区块内;
  • 使用 ul.chunks > li 而非 div.chunks,是因为实际 HTML 中 chunks 是 <ul>,其子项为 <li>,每个 <li> 才是完整的标题+内容容器;
  • 显式等待(WebDriverWait)替代固定 time.sleep(),提升稳定性与效率;
  • 异常捕获保障单个区块失败不影响整体流程;
  • 输出时添加分隔符与序号,便于人工校验结构完整性。

⚠️ 注意事项:

  • 不要盲目使用多线程——本任务为 I/O 密集型且依赖浏览器上下文,多线程反而易引发 WebDriver 实例冲突或页面状态混乱;
  • 若需更高性能或纯静态内容,可结合 requests + BeautifulSoup(需处理 JS 渲染内容时仍需 Selenium);
  • 实际部署时建议添加 User-Agent、反爬延迟及异常重试机制。

最终生成的文本将严格遵循:

--- Article 1 ---
Article I - GENERAL PROVISIONS

The ordinances embraced in the following chapters...

--- Article 2 ---
Article II - DEFINITIONS

Unless the context otherwise requires...

真正实现标题与所属段落的精准绑定。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4993

2023.11.10

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

673

2023.11.13

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

60

2026.10.16

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

40

2026.10.16

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

40

2026.10.16

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

20

2026.10.16

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

20

2026.10.16

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

20

2026.10.16

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

40

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn