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
相关产品推荐
相关产品推荐

