先理清 URL 发现的顺序
搜索蜘蛛发现一个 URL,通常要先有一个入口:要么抓到了包含这个链接的页面,要么从 sitemap、外部引用等渠道拿到了地址。蜘蛛池里的入口页就是扮演这个入口角色,但它本身也是一张普通网页,必须先被搜索蜘蛛抓取并解析,后面的目标 URL 才有可能进入待抓队列。入口页自己没被抓,里面的链接写得再全也没有出口。
入口页迟迟不被抓的几个常见原因
- 入口页没有任何外部链接指向,也没有出现在 sitemap 里,蜘蛛缺少走到它的路径;
- 域名或目录被 robots.txt 整体拦住,蜘蛛直接跳过;
- 入口页返回 403、404 或 5xx,或者需要登录、带 Cookie 才能看到正文;
- 入口页数量多、域名新、历史抓取记录接近于零,调度优先级天然靠后;
- 页面响应时间过长,蜘蛛多次尝试超时后降低访问频率。
怎么判断入口页有没有真的被抓
最直接的办法是看服务器日志,而不是看统计报表。先筛选请求中的 User-Agent,再对照访问 IP:真实搜索蜘蛛的 IP 可以通过反向解析或公开 IP 段核对,而 UA 本身是可以伪造的,只看 UA 容易误判。
日志里重点看三件事:入口页是否返回 200、蜘蛛大概多久来一次、有没有从入口页之后的第二步请求。如果入口页有 200 记录,但目标 URL 一条请求都没有,说明入口页被抓了,链接却没有被顺利提取或没有被排队,问题多半出在链接写法、robots 拦截或页面结构上。
让入口页先具备被发现的条件
- 把入口页地址放进 sitemap,保证至少有一个标准提交渠道;
- 入口页之间做有限度的互链,保留正常层级,避免只做成一个闭环;
- 保证入口页可匿名访问、响应稳定,正文里有真实可读的文字;
- 入口页数量不要一次铺得太大,先跑通一小批再逐步扩展。
抓取预算是有限的资源。入口页如果长期没有任何被引用的痕迹、打开又慢,蜘蛛自然会把它排在后面。
几个容易踩的误区
- 只盯着目标 URL,把入口页当成一次性工具,不关心它是否被抓;
- 认为提交了 sitemap 就一定会被抓,实际还要看抓取调度和站点权重;
- 入口页全是新域名、零外链,却指望蜘蛛自己找上门;
- 直接拿日志里的 UA 判断蜘蛛身份,把普通爬虫程序误当成搜索蜘蛛。
小结
入口页和目标 URL 是同一条链上的两段:先让入口页被抓取、被解析,目标 URL 才有被发现的机会。日常排查时,把入口页的可访问性、可发现性和日志记录放在一起看,比单纯堆入口页数量更有实际意义。