You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中使用Xray实现宜家网站图片爬取的分页处理问题

使用Xray在Node.js中实现宜家网站的分页图片爬取

嘿,我来帮你搞定这个宜家分页爬取的问题!从你给出的分页HTML结构来看,分页链接的规律很清晰——每一页的URL都带有pageNumber参数,这正好适合用Xray的分页功能来处理。下面我一步步给你讲怎么实现:

1. 先安装依赖

首先确保你已经初始化了Node.js项目,然后安装Xray:

npm install x-ray

2. 基础爬取代码(自动跟进分页)

Xray自带分页处理能力,我们可以直接用paginate方法来跟进所有分页链接。这里需要注意几个关键点:

  • 分页链接是相对路径,所以要拼接宜家的基础域名
  • 要排除当前页的链接(带active类的那个)
  • 要根据宜家页面的实际结构调整图片选择器

以下是完整示例代码:

const Xray = require('x-ray');
// 初始化Xray,可选添加请求头避免被反爬
const x = Xray({
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
  }
});

const baseUrl = 'https://www.ikea.com';
// 起始页URL
const startPage = '/cn/en/search/?query=green&pageNumber=1';

// 定义爬取规则
x(baseUrl + startPage, {
  // 这里的选择器需要根据宜家页面实际的图片容器调整,比如检查图片的父类或标签
  pageImages: x('.product-compact__image img', ['@src'])
})
// 指定分页链接的选择器:排除当前激活页,获取所有其他分页的相对链接
.paginate('#pagination a:not(.active)@href')
// 可选:限制爬取的最大页数,防止无限爬取
.limit(10)
// 处理爬取结果
(function(err, results) {
  if (err) {
    console.error('爬取出错:', err);
    return;
  }
  // 把所有页面的图片链接合并成一个数组
  const allImages = results.pageImages.flat();
  console.log('总共爬取到的图片链接:', allImages);
  // 这里可以添加保存图片或写入文件的逻辑
});

3. 应对分页省略号的情况

你提供的HTML里最后一个分页链接是省略号(/cn/en/search/?q...),这种情况下Xray可能无法识别后续的页面。如果能确定总页数,我们可以手动生成所有分页URL,循环爬取,这种方式更可控:

const Xray = require('x-ray');
const x = Xray({
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
  }
});

const baseUrl = 'https://www.ikea.com';
const query = 'green';
const totalPages = 4; // 根据你看到的分页总数设置

// 循环爬取每一页
for (let pageNum = 1; pageNum <= totalPages; pageNum++) {
  const pageUrl = `${baseUrl}/cn/en/search/?query=${query}&pageNumber=${pageNum}`;
  
  x(pageUrl, {
    images: x('.product-compact__image img', ['@src'])
  })
  .then(pageResult => {
    console.log(`第${pageNum}页爬取到${pageResult.images.length}张图片`);
    // 这里可以处理单页的图片链接,比如保存到文件
  })
  .catch(err => {
    console.error(`爬取第${pageNum}页失败:`, err);
  });
}

关键注意事项

  • 选择器调整:一定要打开宜家的页面,用浏览器开发者工具检查图片的实际选择器,把代码里的.product-compact__image img替换成正确的选择器(比如可能是.product-image img)。
  • 反爬处理:添加User-Agent请求头是基础操作,如果遇到更严格的反爬,可以考虑添加延迟、使用代理等。
  • 结果处理:爬取到的图片链接是URL,你可以用axios或request库来下载这些图片到本地。

内容的提问来源于stack exchange,提问作者Biyi Wen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:37:09