引言
1688是国内最大的批发平台,也是无货源卖家最主要的货源渠道。但采集1688商品图片有几个技术难点:大部分商品需要登录才能查看详情,而且SKU规格图(颜色/尺寸/型号)非常丰富,手动整理极其耗时。
本文从技术角度分析1688商品图片的采集方案。
一、登录态处理
1688与淘宝不同,大部分商品需要登录后才能查看详情。未登录状态下,只能看到缩略图,无法获取高清原图。
1.1 传统方案的局限
传统爬虫处理登录态的方式是手动抓取Cookie,写入代码或配置文件。这种方式有几个问题:
-
Cookie过期后需要重新抓取
-
不同账号的Cookie不同
-
操作繁琐,不适合批量采集
1.2 浏览器方案的优势
浏览器方案中,登录态由浏览器内核自动管理:
javascript
// 检测登录状态
function isLoggedIn() {
// 检查用户信息元素
const userInfo = document.querySelector('.user-info, .J_UserInfo');
if (userInfo && userInfo.innerText) {
return true;
}
// 检查Cookie标识
if (document.cookie.includes('_m_h5_tk')) {
return true;
}
return false;
}
// 等待登录完成
async function waitForLogin() {
while (!isLoggedIn()) {
await sleep(1000);
}
console.log('登录成功');
}
用户只需在软件内登录一次,Cookie会自动保存,后续所有请求自动携带。一次登录,长期有效。
二、SKU图提取与分类
1688的SKU图通常放在.sku-list或.J_skuList容器中。每个SKU项包含属性名称(如"红色""M码")和对应的图片。
javascript
function extract1688SkuImages() {
const skuImages = [];
const skuContainer = document.querySelector('.sku-list, .J_skuList, .attribute-list');
if (!skuContainer) return skuImages;
const skuItems = skuContainer.querySelectorAll('.sku-item, .J_skuItem');
skuItems.forEach(item => {
// 提取属性名称(颜色/尺寸/型号)
let name = '';
const nameEl = item.querySelector('.sku-name, .J_skuName');
if (nameEl) {
name = nameEl.textContent?.trim();
}
if (!name) {
name = item.getAttribute('title') || '规格';
}
// 提取图片并转换为原图URL
const img = item.querySelector('img');
if (img) {
let url = img.src || img.getAttribute('data-src');
if (url) {
url = url.split('?')[0];
url = url.replace(/_\d+x\d+\./g, '.');
skuImages.push({ url: url, name: name });
}
}
});
return skuImages;
}
采集后按属性名称自动分类存放:
text
商品标题/
└── SKU图/
├── 红色.jpg
├── 蓝色.jpg
├── S码.jpg
├── M码.jpg
└── L码.jpg
三、主图与详情图提取
javascript
// 提取主图(含轮播图)
function extract1688MainImages() {
const images = [];
const seen = new Set();
// 主图
const mainImg = document.querySelector('.main-image img, .J_mainImage');
if (mainImg) {
let url = mainImg.src || mainImg.getAttribute('data-src');
if (url) {
url = url.split('?')[0];
url = url.replace(/_\d+x\d+\./g, '.');
images.push(url);
seen.add(url);
}
}
// 轮播图
const carousel = document.querySelectorAll('.thumb-list img, .J_thumbList');
carousel.forEach(img => {
let url = img.src || img.getAttribute('data-src');
if (url) {
url = url.split('?')[0];
url = url.replace(/_\d+x\d+\./g, '.');
if (!seen.has(url)) {
seen.add(url);
images.push(url);
}
}
});
return images;
}
// 提取详情图
function extract1688DetailImages() {
const images = [];
const container = document.querySelector('#detail, .detail-content, .J_detail');
if (container) {
const imgs = container.querySelectorAll('img');
imgs.forEach(img => {
let url = img.src || img.getAttribute('data-src');
if (url) {
url = url.split('?')[0];
url = url.replace(/_\d+x\d+\./g, '.');
images.push(url);
}
});
}
return images;
}
四、图片URL转换规则
1688的图片URL带有尺寸后缀,需要转换才能拿到原图:
| 原始URL | 转换后 |
|---|---|
https://cbu01.alicdn.com/img/xxx_100x100.jpg |
https://cbu01.alicdn.com/img/xxx.jpg |
https://cbu01.alicdn.com/img/xxx.jpg?width=100 |
https://cbu01.alicdn.com/img/xxx.jpg |
转换规则:
-
去除URL参数(
?后面的内容) -
去除尺寸后缀(
_100x100)
五、完整采集流程
javascript
async function collect1688Product() {
// 1. 确保已登录
if (!isLoggedIn()) {
console.log('请先登录1688');
return;
}
// 2. 等待页面加载
await waitForPageReady();
// 3. 提取各类素材
const mainImages = extract1688MainImages();
const skuImages = extract1688SkuImages();
const detailImages = extract1688DetailImages();
const title = document.title;
// 4. 保存结果
return {
title: title,
mainImages: mainImages,
skuImages: skuImages,
detailImages: detailImages
};
}
六、实测数据
| 指标 | 数据 |
|---|---|
| 登录态成功率 | 100% |
| SKU图识别率 | 95%+ |
| 图片质量 | 原图(800x800+) |
| 单商品处理时间 | 3-5秒 |
七、总结
1688商品图片采集的核心技术点:
-
登录态处理:浏览器内核自动管理Cookie,一次登录长期有效
-
SKU图分类:从SKU容器中提取属性名称并关联图片
-
原图转换:去除URL中的尺寸后缀获取高清原图
这套方案可以稳定采集1688商品的主图、SKU图、详情图,SKU图自动按颜色/尺寸分类存放。类似的技术方案已经在一些电商工具中成熟应用,如一键存图等。