HTML 链接提取实战:从源码抓出全部 URL 做站点地图与死链审计
这篇教程讲清楚怎么从一段 HTML 里把所有 a 标签 href 链接抓出来,生成站点地图、清查死链、整理外链清单,顺手区分内链外链并去重,全程本地完成不上传源码。
HTML 链接提取实战:从源码抓出全部 URL 做站点地图与死链审计
做迁移、做 SEO 复核的时候,我最常遇到的一件事:手上有一份 HTML 导出文件,需要知道这页到底引了多少链接,链到了哪里。一个一个翻源码不现实,正则又容易漏掉换行和属性顺序变化的情况。把 HTML 里所有链接干净地提取出来,才是这类活的起点。
链接到底藏在 HTML 的哪里
最核心的是 a 标签的 href 属性,这是页面给用户的跳转入口。但一份完整的资源清单不止于此:图片在 img 的 src,脚本在 script 的 src,样式表和 canonical 在 link 的 href,还有一部分 URL 藏在 meta 的 content 里(比如 og:image、refresh 跳转)。只盯着 a[href] 会漏掉一半外部依赖。
HTML 链接提取器 用浏览器自带的 DOMParser 解析,把上面这几类元素一次扫完,输出成 CSV。和手写正则相比,DOMParser 走的是真实 DOM 树,属性带不带引号、大小写、换行都不影响结果,这一点在处理压缩过或手改过的模板时特别省心。
一个真实的输入输出例子
假设有这么一段 HTML:
<a href="/about">关于我们</a>
<a href="https://github.com/toolora">GitHub</a>
<a href="/about">关于我们</a>
<img src="/img/logo.png">
<link rel="canonical" href="https://toolora.info/zh/">
<script src="https://cdn.example.com/sdk.js"></script>
提取出来的链接清单是这样:
type,url
a,/about
a,https://github.com/toolora
a,/about
img,/img/logo.png
link,https://toolora.info/zh/
script,https://cdn.example.com/sdk.js
可以看到 /about 出现了两次,后面去重那一步会把它合成一条。每条都带上来源元素类型,方便你后续按 a、img、script 分桶处理。
做站点地图与抓取清单
如果这份 HTML 是首页或导航页,抓出来的全部 a[href] 就是一张天然的链接图。把内链筛出来去重,基本能拼出一级、二级页面的清单,再喂给爬虫做更深一层抓取,就不用从零猜路径。导出 CSV 后,我习惯用 CSV 列提取工具 单独把 url 这一列抽出来,直接得到一份纯链接清单,贴进爬虫种子文件或站点地图生成脚本。
区分内链外链并去重
拿到链接清单后,真正有用的两步是分类和去重。
区分内链外链,看域名就行:以 / 开头的相对路径,或者域名等于你自己站点的,算内链;域名不一样的算外链。这一步直接决定后面怎么处理。内链关注的是站内结构和死链;外链关注的是第三方依赖和隐私合规,比如收紧 CSP 之前,得先知道页面到底引了哪些外部域名的脚本和样式。
去重也别忽略。模板里同一个链接经常出现几十次(导航、页脚、面包屑都会重复),不去重的话清单会被稀释得没法看。按完整 URL 去重最稳妥,如果想更进一步,可以把末尾斜杠、大小写做归一化,但要注意 URL 路径部分其实是大小写敏感的,归一化前先确认你的服务器行为。
查死链与 SEO 审计
死链清查的逻辑很直接:先用提取器把全站各页的 a[href] 收齐,去重得到唯一 URL 集合,再逐个发 HEAD 请求看返回码,404 和 410 就是要修的死链。提取这一步如果做得不干净,后面整条链路都会失真,所以源头的准确性最重要。
SEO 审计里链接清单还有别的用处:统计每页的外链数量、检查 canonical 是否指向正确地址、看看有没有误引到测试域名或已下线的 CDN。这些都建立在一份完整、去重、分好类的链接清单之上。
有一点要提醒:相对 URL 会按原样输出,爬取前需要结合站点 base 解析;另外 JS 动态生成的链接不在静态 HTML 里,这个工具提取不到,需要的话得先把页面渲染成最终 HTML 再提取。
Made by Toolora · Updated 2026-06-13