爬虫日志分析中,动态页面的可见内容不能只看HTML源码里有没有文字。搜索引擎抓取到的往往是初始HTML,而用户看到的文字可能是JavaScript执行后才插入的。要确认“可见内容”,需要把日志里的抓取记录、返回的HTML、以及渲染后的DOM三者对照起来判断。
很多人看到日志中某个动态URL返回200,就认为页面内容已经被抓取。200只说明服务器成功响应了请求,并不说明响应体里包含最终可见文字。如果文字由前端脚本异步加载,初始响应可能只有一个空容器,例如<div id="app"></div>。此时日志记录是成功的,但可见内容并不在这一次响应中。
另一种误解是:只要robots.txt允许抓取,内容就会进入索引。robots.txt只控制抓取许可,不控制索引移除,也不保证动态内容被渲染。日志分析要回答的是“抓取者实际拿到了什么”,而不是“我们期望它拿到什么”。
先检查日志里能拿到哪些字段。常见的有:请求URL、状态码、响应字节数、User-Agent、抓取时间、Referer。对动态页面,重点看响应字节数是否稳定偏小。如果同一模板的页面字节数长期只有几百字节,而浏览器里可见文字很多,说明返回的很可能是壳页面。
这里要区分“可能原因”和“已经定位的原因”。字节数小可能是壳页面,也可能是服务端做了压缩或分块传输,不能仅凭一个现象下结论。
下面是一套可以实际执行的核对流程,适用于第一次接触这个问题的场景。
判断结果时注意适用条件:如果网站本身是服务端渲染,原始响应就应包含文字;如果是客户端渲染,则需要确认抓取方是否具备渲染能力。不同搜索引擎对JavaScript渲染的支持程度不同,必须分别核查,不能用一个引擎的表现推断另一个。
确认可见内容是否被抓到,只是爬虫日志分析的一步。下一步是拿这些结论去对照页面实际对外呈现的内容:如果渲染后才出现的文字确实重要,就需要考虑让它在初始响应中也可获得,或者确认目标抓取方能够执行脚本。站点地图和HTTPS都不会改变这个判断,它们不保证收录,也不保证动态文字被看见。
建议先固定一个模板做小范围验证,把原始响应、渲染DOM、日志记录三者放在一起比对,再决定是否需要调整输出方式。