爬取不到数据排查指南

常见原因与解决方案

原因 1:数据异步加载(最常见 - 占 70%)

现象

  • 采集规则配置正确,但采集到的数据为空或不完整
  • 在浏览器中能看到数据,但采集工具采不到
  • 页面加载时有加载动画或"加载中..."提示

解决方案

  • 在"提取数据"或"循环列表"步骤中添加等待
  • 右键 → 高级选项 → 设置"执行前等待":2-5 秒
  • 或设置"等待元素出现",填入数据容器 XPath

原因 2:XPath 定位错误(占 20%)

现象

  • 采集规则中的 XPath 在浏览器中能找到元素
  • 但采集时显示"未找到"或采集到错误的数据
  • 不同页面的源代码格式不一样

解决方案

  • 修改 XPath 为相对定位://ul[@id='list']//li 而非 /html/body/div[3]/div[2]/ul/li[5]
  • 使用文本锚点://a[normalize-space()='目标文本']
  • 使用 contains()://div[contains(@class, 'item')]
  • 设置备选 XPath(在字段定位中添加多个选项)

原因 3:IP 被封禁(占 5%)

现象

  • 采集开始正常,采集几页后突然无法获取数据
  • 返回 403 或 429 错误
  • 浏览器访问该网站也被拒绝

解决方案

  • 降低采集速度:每个请求间隔 2-5 秒
  • 更换 IP:使用代理 IP 或 VPN
  • 等待 24 小时后重试

原因 4:网页中本身没有数据(占 3%)

现象

  • 采集规则配置正确,但采集结果为空
  • 在浏览器中也看不到数据

解决方案

  • 按 F12 打开开发者工具,查看网页源代码
  • 搜索目标数据是否存在于 HTML 中
  • 检查是否需要切换页面或修改搜索条件

原因 5:元素在 iframe 中(占 2%)

现象

  • XPath 在浏览器中能找到元素
  • 采集工具始终报"未找到元素"

解决方案

  • 在浏览器 F12 中搜索 <iframe,查看目标元素是否在 iframe 内
  • 修改 XPath 包含 iframe://iframe[@id='content']//div[@class='data']

排查顺序(按优先级)

步骤检查项操作结果
1异步加载Network 查看 XHR 请求;添加 2-5 秒等待解决
2XPath 正确性浏览器 Console 输入 $x("XPath") 测试解决
3网页有数据F12 查看源代码,搜索关键词解决
4iframe 检查F12 搜索 <iframe,修改 XPath解决
5IP 被封观察是否返回 403 错误,更换 IP解决

快速调试命令

浏览器 F12 Console

// 测试 XPath
$x("//div[@class='item']")

// 获取元素文本
$x("//div[@class='item']")[0].textContent

// 查看元素数量
$x("//div[@class='item']").length