很多人在做蜘蛛池时,把注意力全放在入口页上:链接够不够、结构清不清楚、有没有被拦截。但对照日志会发现,入口页一切正常的情况下,目标 URL 的抓取量依然上不去。这时候需要把视线从入口页移开,看看目标站本身的响应表现。
入口页负责“发现”,目标站负责“被抓到”
搜索蜘蛛的工作大致分两步:先在入口页上看到链接,把这些 URL 放进待抓取队列;随后真正去请求这个 URL。入口页决定的是能不能被发现,而请求时快不快、成不成功,取决于目标站自己。
所以入口页做得再规范,也只能把 URL 送进队列。队列里的 URL 什么时候被取出来,还要看目标站所在主机当前的抓取状况。
抓取节奏通常是按站点分配的
搜索引擎不会无限量地抓一个站。它会结合历史抓取成功率、响应时间、页面更新频率等信号,给每个主机分配一个大概的抓取节奏。表现稳定、响应快的站,节奏会慢慢放开;经常超时、报错的站,节奏会被压低。
这套逻辑同样适用于目标站。如果目标站响应慢,即使入口页源源不断地提供新 URL,这些 URL 也只能排队等待,而且队列会越积越长。
目标站慢会带来哪些连锁反应
- 待抓取队列变长:新发现的 URL 排在后面,抓取延迟可能从几分钟拉长到几天。
- 抓取成功率下降:请求超时被记为失败,失败率一高,抓取节奏会进一步收紧。
- 单轮抓取深度受限:蜘蛛在一轮抓取里能走的路变短,靠后的链接更容易被跳过。
- 重复发现:入口页还在不断输出同一个 URL,队列里堆起大量重复项。
入口页慢和目标页慢,影响不是一回事
入口页响应慢,影响的是发现环节——蜘蛛拿不到页面内容,链接自然提取不出来,入口页本身的抓取频率也会跟着下滑。
目标页响应慢,影响的是抓取环节——链接已经被发现了,但请求这一步走不动。两种问题在日志上的表现也不同:前者是入口页的请求耗时异常,后者是目标 URL 的超时或耗时抖动。
排查时先把这两类日志分开看,能省掉不少无效折腾。
可以按这个顺序排查
- 对比目标 URL 与入口页的平均响应时间,看差距是否明显。
- 确认目标站是否对搜索蜘蛛做了额外的限速、验证或拦截。
- 检查目标站有没有偶发的 5xx、连接重置,比例不高也值得留意。
- 看入口页输出的 URL 是否大量重复,重复项会挤占队列。
- 确认目标站同一时间是否被其他抓取程序压满带宽。
几个容易踩的误区
入口页数量翻倍,目标 URL 的抓取量就会翻倍——这个假设在目标站响应慢的时候基本不成立,多出来的入口页往往只是把同一个 URL 反复塞进队列。
- 只盯着入口页改结构,忽略目标站本身的响应质量。
- 把目标站的超时理解成“蜘蛛没来”,实际是来了但没抓成。
- 为追求数量把大量低质量 URL 一起丢给搜索蜘蛛,反而稀释了有效链接。
小结
入口页解决的是发现效率,目标站解决的是抓取效率,两者是接力关系而不是替代关系。如果目标站本身响应慢、错误多,优先把它修好,比继续堆入口页更有效。日常运营中,把入口页日志和目标 URL 的抓取日志放在一起对照,才容易看清瓶颈到底在哪一环。