对照百度蜘蛛在测试环境与线上的行为,核心不是比较两份日志的条数,而是确认同一个URL在两个环境下返回的状态码、响应头、robots规则和DNS解析是否一致。具体做法是:先固定一个待查URL,再分别从线上访问日志、测试环境访问日志、服务器配置和DNS记录中收集证据,最后用差异项定位抓取异常的原因。适用前提是你对两个环境都有日志读取权限,且测试环境能通过公网或内网被爬虫访问到。
百度蜘蛛的User-Agent通常包含Baiduspider字样,但User-Agent可以伪造,所以不能只看这一项。判断依据应组合使用:
如果测试环境日志里没有任何来自百度IP段的请求,说明蜘蛛根本没进来,此时对照的重点就转向入口是否可达,而不是页面内容差异。
测试环境常见问题是只在内网可访问,或用了需要登录的域名。检查项包括:
dig或nslookup分别查两个环境的A记录。判断结果:如果线上返回200而测试环境返回401、403或连接超时,差异原因基本可以定位在访问控制层,与页面内容无关。如果两个环境都返回200,再继续对照响应头和robots。
测试环境经常直接复制线上配置,或反过来加了全站Disallow。核对时不要只看文件是否存在,要看具体规则对目标URL的匹配结果:
/robots.txt,比较Disallow路径和Sitemap地址。需要特别注意:robots.txt的抓取限制不等于可靠的索引移除。即使测试环境写了Disallow,已经收录的URL仍可能留在索引中,移除索引需要另行处理。同理,站点地图提交也不保证收录,它只是发现URL的线索之一。
用curl -I分别请求线上和测试环境的同一个URL,逐项比较:
假设某页面线上返回200,测试环境返回302并跳转到登录页,那么蜘蛛在测试环境拿到的就是登录页内容,这不是页面模板问题,而是跳转规则问题。判断时应以实际响应为准,不要凭配置文件的字面内容下结论。
把两个环境的访问日志按时间排序,找出同一蜘蛛IP在相近时间段的请求序列。可执行的检查步骤是:
验收信号是:同一蜘蛛IP在两个环境请求同一URL时,状态码和响应头关键字段一致,且没有因访问控制被拒绝。如果只有测试环境出现异常状态码,优先修该环境的入口或配置;如果两个环境都异常,则问题在应用层,与蜘蛛本身无关。HTTPS只保证传输加密,不保证安全无漏洞或排名,不要把协议差异当成抓取差异的默认解释。
下一步建议固定一个具体URL,把它的线上与测试环境响应头、robots匹配结果和最近七天日志导出到同一张表里,逐列比对后再决定改配置还是改代码。