网页内容提取
给一个网址,把页面里真正有用的部分抠出来:正文、所有链接、所有图片、表格、Meta 信息、页面上留的联系方式。想按自己的规则取,就用 CSS 选择器或正则。抓取在服务端完成,所以不受浏览器跨域限制;抓回来的内容可以直接复制,也能导出成 JSON 或 CSV 接着处理。
说明
- 正文是怎么找出来的
- 先把 script、style、nav、header、footer、aside、form 这些肯定不是正文的节点整体删掉,然后给每个含文字的块打分:字数越多分越高,逗号句号越多分越高(正文的标点密度明显高于导航),分数还会往父节点和祖父节点累积。最后按链接密度打折——「字不多但全是链接」正是导航和相关推荐的特征,再根据 id / class 里有没有
article、content这类词做一次加权,取分数最高的那个容器输出。这套做法不依赖任何针对具体站点的规则,所以换个站也能用,但对模板特别花哨的页面偶尔会跑偏。 - 为什么有时候什么都提不到
- 因为抓取发生在服务端,拿到的是最初的 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 生成。