ag8u(如提示需要,请输入)
这个工具解决什么问题
做采集的人每天都要处理链接。从网页源码里找出所有 a 标签和图片地址,本来就不轻松;更烦的是扒出来的地址一大半带着追踪尾巴——utm_source、fbclid、spm、from 这些参数,看着是同一个页面,实际是几十条不同的字符串,直接扔进采集队列就会重复抓同一页。重复的还得一条条对着删,相对路径 /post/1024.html 还得手工拼上域名才能用。这些活儿没有技术含量,但每次开工前都得先干半小时。
- 原来的做法:把网页源码复制到编辑器里,用正则找 href,再手工把相对路径拼成完整地址,最后用 Excel 去重、肉眼比对哪些参数是没用的。
- 用这个工具:把源码粘进左边,基准地址一填,右边立刻出现去重、去参数、补全后的干净地址列表和域名分布,一键导出 CSV。
- 省下来的:原来从扒链接到整理成可用的地址清单要半小时,现在粘贴即出结果;去重和去参数都不用手工做,也不会漏。
技术实现
一个 HTML 文件,内联 CSS 与 JavaScript,双击用浏览器打开就能用。之所以选单文件网页而不是桌面程序:链接清洗是采集任务开始前的临时动作,不该为了它装一个软件;而且浏览器自带 DOMParser 和 URL 这两个标准 API,解析 HTML、补全相对路径、拆解查询参数都能做到规范级正确,自己写正则反而容易出错。所有计算都在本地浏览器里完成,页面里没有任何网络请求代码。
- 用浏览器自带 DOMParser 解析,而不是正则匹配 href:用正则从 HTML 里抠链接是经典坑:属性用单引号、大小写混写、标签跨行、href 里含引号或实体字符,任何一种都能让正则翻车。这里直接用 DOMParser().parseFromString(html,'text/html') 交给浏览器的 HTML 解析器处理,再 querySelectorAll('a[href]') / ('img[src]') 取属性——浏览器怎么解析页面,工具就怎么解析,容错性天然一致。
- 相对路径补全用 URL 构造函数,不手写字符串拼接:把 /post/1.html 拼成完整地址,手写 base + path 会在处理「协议相对地址 //cdn.a.com/x.png」「带 ../ 的回退路径」「已经是绝对地址」这些情况时出错。这里统一交给 new URL(raw, base),由浏览器按 URL 标准做解析:能解析的自动补全,解析不了的(javascript:、mailto:、tel:)直接判为无效跳过。
- 追踪参数用「前缀 + 黑名单」双重匹配:utm_ 开头的参数一律算追踪参数(覆盖 utm_source / utm_medium / utm_campaign 及其后续变体),其余常见追踪参数(fbclid、gclid、spm、scm、share_token、from、ref、_t 等 30 余个)走黑名单精确匹配。两者都命中才删,普通业务参数(如 ?id=7、?page=2)会被完整保留——这一点很关键,一刀切删掉全部参数会破坏分页和详情页地址。
- 先去重还是先清洗:顺序决定结果:去重必须发生在清洗之后。因为 /post/1.html?utm_source=a 和 /post/1.html?utm_source=b 在清洗前是两个不同字符串,清洗后才是同一个地址。工具先清洗再比对去重,所以带不同追踪尾巴的同一页面只会留下一条,并统计出「重复剔除」的条数。
- 统计口径清晰:无效、重复、剔除参数分开计:结果区给出输入条数、有效地址、重复剔除、无效跳过、域名个数五个数字,另有「剔除追踪参数」的总数。被去重掉的条目不再计入参数剔除数,避免两个数字互相污染;每个数字都对应一个明确的处理动作,出问题时能一眼看出是哪一步吃掉了数据。
- 零网络请求,导出带 BOM 的 CSV:整个页面没有 fetch / XMLHttpRequest / 外部 CDN 引用,字体走系统字体,样式全部内联,断网可用,也可按 F12 自行审计。导出的 CSV 前置 UTF-8 BOM,Excel 双击打开中文不乱码;下载通过 Blob + a[download] 在本地完成,不经过任何服务器。
技术栈:单 HTML 文件、原生 JavaScript、DOMParser + URL API、零依赖 / 零安装
已知局限:只处理你粘贴进来的源码或地址列表,不主动访问网页(浏览器同源策略下也做不到);抓不到 JS 渲染后才出现的链接,需要你自己在开发者工具里复制渲染后的 DOM;域名统计按 hostname 精确匹配,不自动合并子域(如 m.a.com 与 a.com 分开计);不支持字段内换行的 CSV 解析(本工具不涉及)。
操作教程
- 打开工具
双击 tool.html(或拖进浏览器窗口)。页面打开时已经填好一段示例源码和基准地址,右侧直接出现结果,方便先看清长什么样。
预期结果:页面显示左右两栏:左侧是模式切换、基准地址、源码输入框与清洗选项;右侧是统计条、地址列表、域名分布与导出按钮。 - 选择输入方式
要处理网页里的链接,选「① 从网页源码提取」,把网页源码粘进输入框;如果手上已经是一串地址,选「② 清洗 URL 列表」,每行一条粘贴。
预期结果:切换模式后输入框提示语随之变化,结果区立即按新模式重算。 - 填基准地址
处理网页源码时,在「基准地址」里填该网页的网址(例如 https://www.example.com/news/),相对链接才能补成完整地址。
预期结果:填好后,输入框里的 /post/1.html 会在结果区显示为 https://www.example.com/post/1.html。 - 勾选清洗选项
默认已勾选「统一为 https」「去掉跟踪参数」「去掉 # 锚点」「结果去重」;如果需要更彻底的清洗,可以再勾「去掉全部查询参数」或「去掉末尾斜杠」。
预期结果:任意选项变化,右侧结果与统计条立即重算,不需要点任何按钮。 - 核对结果与域名分布
看右上角五个统计数字是否合理;地址列表按序号列出清洗后的地址并标注「链接 / 图片」;域名分布用条形显示每个域名占多少条。
预期结果:同一页面的不同追踪链接合并成一条,「重复剔除」数字大于 0;域名分布条数之和等于有效地址数。 - 导出或复制
点「复制结果」把地址列表写进剪贴板;点「导出 CSV」得到带序号、类型、地址、锚文本的表格;点「导出域名统计」得到域名与数量两列。
预期结果:CSV 用 Excel 双击打开中文不乱码;复制后粘贴出来是一行一条的地址。
全程在浏览器本地完成,不需要联网,不需要安装任何软件;工具只解析你粘贴的内容,不会主动访问任何网站。
常见问题
技术实现与后续维护
本工具由我们自行开发并持续维护,每次迭代都经过本地自测。全部逻辑集中在一个 HTML 文件里,核心是三组纯函数:isTrack() 判断追踪参数、absolutize() 补全相对地址、cleanOne() 完成单条清洗并返回剔除数量;解析入口 extractFromHtml() 与 extractFromList() 只负责把输入变成 {raw, kind} 数组。想改清洗规则只动 cleanOne(),想改界面只动渲染部分。
技术构成:
src/tool.html—— 唯一源码文件:内联样式、HTML 解析与地址清洗算法、渲染逻辑、导出与复制DOCS/开发文档.md—— 工程结构、清洗规则推导、实测数据与扩展点
运行环境:
单 HTML 文件工具,无需编译。用任意现代浏览器(Chrome / Edge / Firefox / Safari)直接打开 src\tool.html 即可运行。
可扩展方向:
- 在 isTrack() 里扩充或收窄追踪参数黑名单
- 增加域名白名单/黑名单过滤,只保留需要的站点
- 增加「读取本地 HTML 文件」入口(FileReader,仍然零上传)
- 增加去重时的规则选项,如忽略 www 前缀或忽略末尾斜杠后再比对
本工具免费提供使用,但不对外分发源码。如果你需要在本工具基础上做功能调整、对接内部系统或长期维护,可以联系我们做二次开发,源码与工程文档可在定制合作中一并交付。
需要其它功能?可以定制
这个工具只做一件事:采集前要从页面里扒链接,还得手工去掉一堆跟踪参数、删重复。如果你的场景还需要别的处理,可以联系我们做二次开发,按你的实际数据格式和流程定制。
常见的定制需求:
- 增加「按域名过滤」,只保留指定域名的地址,方便聚焦单一站点
- 增加「读取本地 HTML 文件」,用 FileReader 直接载入 .html 而不必手工复制源码
- 增加「生成 sitemap 风格的 URL 列表」,用于提交或自检
- 增加「批量替换域名」,把采集地址从测试环境切到生产环境
- 联系方式:邮箱/微信见站内「联系我们」页面,或在本文下方留言
- 定制说明:请附上你的数据样例(脱敏即可)和期望结果,方便快速评估工作量
- 交付形式:定制项目可交付可执行程序,按需一并交付源码与工程文档,支持长期维护
使用说明与免责声明
- 本工具仅用于采集公开可见或你自身拥有权限的数据。
- 请遵守目标网站的服务条款、robots 协议及《网络安全法》等相关法律法规。
- 请合理控制请求频率,不要对目标站点造成访问压力。
- 不得用于采集个人隐私、付费墙内容或任何受法律保护的非公开数据。
- 因使用不当造成的后果由使用者自行承担;本工具不做数据二次分发。
ag8u(如提示需要,请输入)
