h1到h6是语义层级标签,非视觉样式工具;每页仅一个h1作唯一主标题,h2–h6须严格逐级嵌套,跳级、乱序或滥用会损害可访问性与SEO。

提取 到 标题时,别依赖字体大小判断层级
很多人看到渲染后 比 小,就改用 当二级标题——这是语义错误。搜索引擎和屏幕阅读器只认标签名,不看 CSS 渲染结果。提取标题结构时,必须严格按文档中实际使用的 – 标签层级来建树,而不是根据视觉大小反推。
常见错误现象: 实操建议: 使用场景: 实操建议: 第一段 第二段 HTML 规范要求一个页面有且仅有一个 性能影响: 实操建议: 很多中文 HTML 页面用 容易踩的坑: 实操建议:
提取标题与段落不是字符串切分,而是重建文档语义骨架。最常被忽略的,是那些没有显式标签却承载结构信息的部分:比如用
用正则直接匹配 但没处理闭合标签或自闭合变体(如 );忽略嵌套在 内的标题,导致层级错乱。
• 优先用 DOM 解析器(如 Python 的 BeautifulSoup 或 JS 的 document.querySelectorAll('h1,h2,h3,h4,h5,h6'))而非正则提取标题
• 遍历时记录每个节点的 nodeName(如 'H2'),再转为数字层级(parseInt(nodeName.slice(1)))
• 若需保留文档顺序与嵌套关系,应同时提取父容器的 section、article 或 nav 等语义块用
提取段落时, 不算新段落 是块级元素,浏览器会自动在前后加空行;而 只是换行符,不构成新段落。很多文本提取工具把每行 后的内容都当新段落切分,结果把一个自然段切成十几小段。
从 CMS 导出内容、爬取新闻页、解析用户提交的富文本(含手动换行)
• 提取前先 normalize:把连续多个 替换为单个 分隔符,再统一用 切分
• 对不含 但含大量 的旧网页,可结合 CSS display: block 判定是否应视为段落容器
• 注意 缺失闭合标签的情况(如 ),现代解析器通常能自动补全,但需确认解析模式(如 BeautifulSoup 的 'html.parser' vs 'lxml')标题与段落混合提取时,
必须唯一且不可跳级(主标题),且标题层级不能跳跃(如 后直接出现 )。但现实中大量网页违反该规范,导致提取后结构断裂或大纲错位。
跳级标题会让基于层级的 TOC 生成器(如 markdown-it-toc-done-right)漏掉中间层级,或强行插占位符破坏可读性
• 预处理阶段检测并修复跳级:遇到 但上一个标题是 时,插入虚拟 节点(仅内存中,不写回 HTML)
• 对无 的页面,提取第一个 并降级为 (需标记为“推断主标题”)
• 使用 getElementsByTagName 或 CSS selector 时,避免用 'h1, h2, h3, h4, h5, h6' 简单拼接,应分别获取再 merge 排序,确保 DOM 顺序不被选择器引擎打乱中文网页提取常忽略的编码与空格问题
GBK 编码但未声明,或在 内混用全角空格、不间断空格( )、零宽空格(),导致提取后文本粘连或断句异常。
• 用 requests.get(url).text 直接解析,未显式指定 encoding='gbk',中文变乱码
• 把 当普通空格处理,导致“标题 副标题”被切为两个词
• 忽略 在 中的位置,误读成页面末尾的注释
• 先读取原始响应 bytes,用 chardet.detect() 判定编码,再 decode;或强制用 response.content.decode('gbk', errors='ignore')
• 提取文本后,统一 normalize 空格:re.sub(r'[\u00A0\u2000-\u200F\u2028\u2029\u202F\u2060\u3000]+', ' ', text)
• 对含大量内联样式(如 style="font-size:12px;")的标题,提取时剥离 style 属性,避免干扰语义判断 的 CMS 输出,或者用 + CSS 实现的“伪段落”。这类情况必须结合 class 名、上下文位置、兄弟节点特征做二次判定,无法靠单一规则覆盖。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











