Baiduspider抓取 - 动态页面怎样确认可见内容

📍 WDQWDWQD987AAAAA:216.73.216.110
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /2d66e654934e.html
📄

Baiduspider抓取 - 动态页面怎样确认可见内容

要让Baiduspider确认动态页面的可见内容,核心不是“看页面能不能打开”,而是确认在不执行复杂交互、不依赖用户登录或点击的情况下,返回的HTML中已经包含你希望被抓取到的正文。如果正文只能靠JavaScript运行后才出现,Baiduspider可能看不到,也可能看到的是空壳。判断方法应以服务端返回的原始响应为准,而不是浏览器里最终渲染出来的画面。

先用一个假设例子看清问题

假设有一个商品详情页,地址形式为 /product?id=123,页面打开后能看到价格、库存和描述。前端用JavaScript请求接口,再把数据插入页面。你在浏览器里看一切正常,但在服务器返回的HTML里,正文位置只有“加载中”。这种情况下,Baiduspider抓取到的可见内容很可能只是“加载中”,而不是商品信息。

要确认,可以按下面步骤执行:

  1. 用命令行请求该动态地址,例如 curl -A "Baiduspider" "https://example.com/product?id=123",把返回内容保存下来。
  2. 在保存的HTML中搜索商品名称、价格、描述等关键词,而不是只看页面标题。
  3. 如果这些词只出现在JavaScript文件或接口地址里,没有出现在HTML正文中,说明可见内容依赖后续请求。
  4. 再对比浏览器“查看网页源代码”和“审查元素”的结果,前者更接近初始响应,后者是渲染后的DOM。

判断结果很直接:原始HTML中能找到正文,才有较大把握被当作可见内容处理;原始HTML中没有,就不能仅凭浏览器显示正常来判断Baiduspider一定能看到。

检查返回内容时不要混淆三种“可见”

动态页面的“可见”至少有三个层次,确认时要分开:

常见错误是只检查用户可见,就认为抓取可见。另一个错误是只看到HTTP状态码为200,就认为正文一定被识别。状态码正常只说明请求成功,不说明内容已经出现在HTML中。若页面返回200但正文为空,或者正文被放在接口响应里,仍需要继续核查。

如何用可执行方法确认Baiduspider看到的版本

可以按以下检查项逐项确认:

  1. 固定请求头:请求时带上Baiduspider的User-Agent,观察服务器是否返回不同版本。有些站点会根据UA返回简化页或拦截页。
  2. 关闭JavaScript:在浏览器中禁用JavaScript后重新访问。如果正文消失,说明内容依赖脚本渲染。
  3. 查看原始响应:用 curl 或开发者工具的Network面板查看第一个HTML文档响应,而不是看XHR接口响应。
  4. 检查robots.txt:确认是否误屏蔽了动态路径、参数或相关JS、CSS资源。robots.txt限制抓取,不等于能可靠地把已收录页面移除。
  5. 检查站点地图:把重要动态地址列入站点地图有助于发现,但站点地图不保证收录,也不能替代页面本身的可抓取内容。
  6. 检查HTTPS与重定向:HTTPS不保证安全无漏洞或排名,但证书错误、过多跳转可能影响抓取。要确认Baiduspider请求最终落到哪个地址。

如果原始HTML中没有正文,可以考虑服务端渲染、预渲染或静态化,让关键内容在首次响应中就出现。若使用预渲染,要确认返回给Baiduspider的版本与用户版本内容一致,不要用隐藏文字或仅对爬虫展示的内容,这容易引发一致性问题。

不同搜索引擎要分别核查

Baiduspider的行为不代表其他搜索引擎完全一样。对百度有效的抓取表现,不保证在别的搜索引擎同样成立;反过来也一样。动态页面确认可见内容时,应针对目标搜索引擎分别查看其抓取说明和实际请求结果。若页面同时面向多个搜索引擎,最好让核心内容在初始HTML中稳定出现,减少对脚本渲染的依赖。

下一步,挑一个最重要的动态页面,保存Baiduspider User-Agent下的原始HTML,搜索正文关键词。如果找不到,就把它改为服务端输出或预渲染输出,再重复同样的检查。

图1 图2

nginx