“?不知怎么建站?就找怎么建站!?”
背景:
EDI许可证网站和ICP许可证网站需要有丰富的商品数据来应付EDI、ICP许可证下证审核。下面介绍的这种方法是我之前主要的抓取数据的方法,大概用了一年多。这几天又对这个方法进行了一些优化改进。
之前用的方法:
let temp = []
var lists = $('#J_goodsList li.gl-item')
$.each(lists,function(idx,item){
temp.push({
id:$(item).data('sku'),
goods_img:$(item).find('img').attr('src'),
goods_name:$(item).find('.p-name em').text(),
market_price:$(item).find('.p-price i').text(),
})
})
console.log(temp)
通过分类查询京东、淘宝的商品,比如搜索“电子产品”,获取到电子产品的列表
通过JavaScript操作页面dom元素,获取到商品信息数组
通过在线工具将json数组转成excel文件
处理图片地址,包裹上img标签,通过浏览器加载并下载图片
//img13.360buyimg.com/n7/jfs/t1/181788/14/25091/44594/63c0c017F11c3c118/4521648b22e0dd3a.jpg?
原图片
将链接中的n7改成n1(尺寸变大),并且加上img标签
<img src=https://img13.360buyimg.com/n1/s450x450_jfs/t1/181788/14/25091/44594/63c0c017F11c3c118/4521648b22e0dd3a.jpg />
将图片下载到本地
将生成的excel文件数据和EDI网站商品数据合并
将商品图片上传到服务器
手动给每个商品添加商品详情,这个是主要的工作量
这种方式主要有两个缺点:
列表获取不到商品详情图片,需要手动去抓取
过程比较繁琐,有很多需要手动操作的地方
这几天优化后的方法:
获取到的商品信息如下:
通过分类查询京东、淘宝的商品,比如搜索“电子产品”,获取到电子产品的列表。将首图带有京东Logo的商品去掉,留下符合要求的商品
通过JavaScript操作页面dom元素,获取到除了商品详情以外的完整的商品信息
let temp = []
let img_dir = 'dzcp'
var lists = $('#J_goodsList li.gl-item')
$.each(lists,function(idx,item){
var img_url = $(item).find('.p-img img').attr('src')
img_url = img_url.indexOf('http')<0 ? 'https:'+img_url : img_url
var index = img_url.lastIndexOf('/')
var img_file = img_url.substring(index)
//将n7改成n1(图片尺寸变大),并包裹上img标签
var img_tag = "<img src="+img_url.replace("n7","n1")+' />'
temp.push({
id:'https://item.jd.com/'+$(item).data('sku')+'.html',
name:$(item).find('.p-name a em').text().replace(/\s*/g,""),
market_price:$(item).find('.p-price i').text(),
path:'391_394_',
cateid:394,
img_file:img_dir+img_file,
//img_url:img_url,
img_tag:img_tag
})
})
copy(temp)
console.log(temp)
通过JavaScript自动将获取到的商品信息转成excel
function jsonToExcel(data, head, name = 'template') {
let str = head ? head + '\n' : '';
data.forEach(item => {
// 拼接json数据, 增加 \t 为了不让表格显示科学计数法或者其他格式
for(let key in item) {
str = `${str + item[key] + '\t'},`
}
str += '\n'
});
console.log(str)
// encodeURIComponent解决中文乱码
const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
// 通过创建a标签实现
const link = document.createElement("a");
link.href = uri;
// 对下载的文件命名
link.download = `${name + '.xlsx'}`;
link.click();
}
jsonToExcel(temp, "商品链接,标题,商品价格,分类树,分类,图片地址,图片标签,商品详情")
通过执行jsonToExcel函数获取到的excel文件:
通过浏览器将图片下载到本地,具体的操作方法就是将第二步中获取到的img标签,放到一个网页中加载图片,另存为
将生成的excel文件数据和EDI网站商品数据合并
将商品图片上传到服务器
手动给每个商品添加商品详情,这个是主要的工作量
详情图片也分为两种,一种是在img标签中的
另外一种是在css属性background中的,这种相对来说比较麻烦,要一张一张复制
这样一来,比较麻烦的事情只有一件了:
列表获取不到商品详情图片,需要手动去抓取
这个问题也找到了很好的解决方案