首页 > 工具箱 > 网页内容提取

网页内容提取

给一个网址,把页面里真正有用的部分抠出来:正文、所有链接、所有图片、表格、Meta 信息、页面上留的联系方式。想按自己的规则取,就用 CSS 选择器或正则。抓取在服务端完成,所以不受浏览器跨域限制;抓回来的内容可以直接复制,也能导出成 JSON 或 CSV 接着处理。

说明

正文是怎么找出来的
先把 script、style、nav、header、footer、aside、form 这些肯定不是正文的节点整体删掉,然后给每个含文字的块打分:字数越多分越高,逗号句号越多分越高(正文的标点密度明显高于导航),分数还会往父节点和祖父节点累积。最后按链接密度打折——「字不多但全是链接」正是导航和相关推荐的特征,再根据 id / class 里有没有 articlecontent 这类词做一次加权,取分数最高的那个容器输出。这套做法不依赖任何针对具体站点的规则,所以换个站也能用,但对模板特别花哨的页面偶尔会跑偏。
为什么有时候什么都提不到
因为抓取发生在服务端,拿到的是最初的 HTML,不会执行 JavaScript。单页应用(Vue / React 那类)和瀑布流列表的内容都是脚本渲染出来的,源码里只有一个空壳。遇到这种情况,打开浏览器的开发者工具切到网络面板,找到真正返回数据的那个接口地址,直接把接口地址填进来用「正则表达式」提取,往往更省事。
CSS 选择器支持到什么程度
支持标签名、#id.class、属性选择器([attr][attr=v][attr^=v][attr$=v][attr*=v][attr~=v])、后代(空格)、子代 >、相邻兄弟 +、通用兄弟 ~,以及用逗号分组。选择器会被翻译成 XPath 再执行,翻译结果会显示在结果上方,方便你核对。伪类不支持:first-child:nth-of-type() 这些),因为 XPath 里的对应写法差异太大,容易给出似是而非的结果。
正则那一栏怎么写
直接写正则本体,不用写两边的分隔符和修饰符,工具会按「忽略大小写 + 点号匹配换行 + UTF-8」执行。写了捕获组就取第一个组,没写就取整段匹配。例如取所有二级标题用 <h2[^>]*>(.*?)</h2>,取所有 JSON 里的 id 字段用 "id"\s*:\s*"?(\d+)。结果会自动做 HTML 实体解码并去掉空白项。
抓取的边界在哪
目标地址会先过一遍 SSRF 校验:内网地址、回环地址、非 80/443 端口一律拒绝,跳转的每一跳都重新校验,避免被用来探测内网。单次最多下载 3MB、跟随有限次跳转,每种提取最多返回 1000 条。请只对你有权访问的页面使用,并遵守对方的 robots.txt 与使用条款;高频批量采集请自行控制节奏。
相关工具
网站综合信息Meta 与关键词密度HTTP 响应头在线 HTTP 请求robots.txt 检测sitemap 生成
已复制