无分页瀑布流网站通常通过滚动触发Ajax请求加载新内容,传统的火车头采集规则只能抓取页面初始渲染的静态内容,无法获取到后续动态加载的数据。要解决这个问题,我们需要先分析网站的Ajax请求逻辑,再针对性配置采集规则。

第一步:分析Ajax请求规律
首先打开目标网站,按F12打开浏览器开发者工具,切换到Network面板,勾选XHR选项过滤出Ajax请求。然后滚动页面触发内容加载,观察新增的请求:
- 记录请求的URL地址,看是否包含页码、偏移量、时间戳这类动态参数
- 查看请求的返回数据格式,通常是JSON结构,里面包含需要采集的内容字段
- 确认请求方法,大部分是GET请求,少部分需要POST提交参数
比如某瀑布流网站的滚动加载请求URL为https://api.ipipp.com/list?offset=20&limit=20,其中offset是已加载的内容数量,limit是每次加载的条数,返回数据是JSON格式,包含content、title等字段。
第二步:配置火车头采集的起始地址
打开火车头采集器,新建采集任务,在“起始网址”配置页添加我们分析到的Ajax接口地址,把动态参数设置为变量。比如初始地址可以写:
https://api.ipipp.com/list?offset=0&limit=20
如果需要采集多页,可以在“多页采集”里设置参数递增规则,比如offset从0开始,每次增加20,直到没有新数据返回为止。
第三步:设置内容提取规则
因为Ajax接口返回的是JSON数据,我们需要把采集的内容格式设置为“JSON/XML”,然后添加对应的字段提取规则:
- 字段名设置为需要采集的内容名,比如“标题”、“内容”
- 提取规则选择“JSON取值”,填写对应的JSON路径,比如标题对应路径为
$.data[0].title - 如果是数组形式返回的多条数据,可以开启“循环提取”,设置循环路径为
$.data,再分别提取数组内的字段
第四步:处理返回数据中的特殊内容
如果返回的JSON数据里包含HTML标签,比如内容字段里带有<img>、<p>这类标签,我们需要在“数据处理”页添加标签过滤规则,去除不需要的标签,或者保留需要的格式。
示例JSON返回数据处理代码(用于验证提取逻辑):
// 模拟接口返回的JSON数据
const response = {
code: 0,
data: [
{
title: "测试标题1",
content: "这是第一条内容的文本描述",
img_url: "https://ipipp.com/img/1.jpg"
},
{
title: "测试标题2",
content: "这是第二条内容的文本描述",
img_url: "https://ipipp.com/img/2.jpg"
}
],
has_more: true
};
// 提取标题列表
const titles = response.data.map(item => item.title);
console.log(titles); // 输出 ["测试标题1", "测试标题2"]常见问题解决
如果遇到接口返回403、数据为空的情况,可以检查以下几点:
- 是否在请求头里添加了必要的参数,比如User-Agent、Referer,模拟浏览器请求
- 动态参数是否正确递增,比如offset是否和已加载内容数量匹配
- 接口是否有访问频率限制,适当添加采集间隔,避免被封禁IP
按照以上步骤配置完成后,就可以让火车头采集器自动遍历所有Ajax请求,完整获取无分页瀑布流网站的所有动态加载数据了。