使用JavaScript抓取京东、淘宝商品数据的自动化解决方案

183 阅读5分钟

“ 不知怎么建站?就找怎么建站! ”

背景:

EDI许可证网站和ICP许可证网站需要有丰富的商品数据来应付EDI、ICP许可证下证审核。下面介绍的这种方法是我之前主要的抓取数据的方法,大概用了一年多。这几天又对这个方法进行了一些优化改进。

之前用的方法:

通过分类查询京东、淘宝的商品,比如搜索“电子产品”,获取到电子产品的列表

通过JavaScript操作页面dom元素,获取到商品信息数组

公共参数(item_get-获得淘宝商品详情taobao.item_get

image.png

通过在线工具将json数组转成excel文件

处理图片地址,包裹上img标签,通过浏览器加载并下载图片

//img13.360buyimg.com/n7/jfs/t1/181788/14/25091/44594/63c0c017F11c3c118/4521648b22e0dd3a.jpg 原图片

将链接中的n7改成n1(尺寸变大),并且加上img标签

将图片下载到本地

将生成的excel文件数据和EDI网站商品数据合并

将商品图片上传到服务器

手动给每个商品添加商品详情,这个是主要的工作量

数据返回示例

"item": { "num_iid": "652874751412", "title": "奶油风布艺沙发现代简约轻奢小户型客厅直排可拆洗沙发原木可定制", "desc_short": "", "price": 480, "total_price": "", "suggestive_price": "", "orginal_price": 480, "nick": "惜情yqq1127", "num": 200, "detail_url": "item.taobao.com/item.htm?id…", "pic_url": "//img.alicdn.com/imgextra/i4/2568161054/O1CN01aYBriY1Jem9UDtt9e_!!2568161054.jpg", "brand": "#0 工厂", "brandId": "", "rootCatId": "", "cid": 50020632, "desc": "

\n
\n <img src="img.alicdn.com/imgextra/i3…" />\n <img src="img.alicdn.com/imgextra/i3…" />\n <img src="img.alicdn.com/imgextra/i1…" />\n <img src="img.alicdn.com/imgextra/i2…" />\n <img src="img.alicdn.com/imgextra/i1…" />\n <img src="img.alicdn.com/imgextra/i3…" />\n <img src="img.alicdn.com/imgextra/i3…" />\n <img src="img.alicdn.com/imgextra/i4…" />\n <img src="img.alicdn.com/imgextra/i1…" />\n <img src="img.alicdn.com/imgextra/i4…" />\n <img src="img.alicdn.com/imgextra/i3…" />\n <img src="img.alicdn.com/imgextra/i1…" />\n <img src="img.alicdn.com/imgextra/i4…" />\n <img src="img.alicdn.com/imgextra/i1…" />\n <img src="img.alicdn.com/imgextra/i2…" />\n <img src="img.alicdn.com/imgextra/i2…" />\n <img src="img.alicdn.com/imgextra/i4…" />\n <img src="img.alicdn.com/imgextra/i2…" />\n <img src="img.alicdn.com/imgextra/i4…" />\n
\n
<img src="www.o0b.cn/i.php?t.png…" style="display:none" />", "item_imgs": [ { "url": "//img.alicdn.com/imgextra/i4/2568161054/O1CN01aYBriY1Jem9UDtt9e_!!2568161054.jpg" }, { "url": "//img.alicdn.com/imgextra/i3/2568161054/O1CN01kjOfNb1Jem9DmWn8Y_!!2568161054.jpg" }, { "url": "//img.alicdn.com/imgextra/i1/2568161054/O1CN01HoB9ha1Jem9DmWn8r_!!2568161054.jpg" }, { "url": "//img.alicdn.com/imgextra/i4/2568161054/O1CN011PjP2P1Jem9MXEUFT_!!2568161054.jpg" }, { "url": "//img.alicdn.com/imgextra/i3/2568161054/O1CN01KUfBFL1Jem9KTTMn1_!!2568161054.jpg" } ], "item_weight": "", "post_fee": 0, "freight": "", "express_fee": "", "ems_fee": "", "shipping_to": "", "video": { "url": "cloud.video.taobao.com/play/u/2568…" }, "sample_id": "", "props_name": "31480:14306495906:几人坐:脚踏906048cm;31480:14306495907:几人坐:双人1659567cm;31480:14306495908:几人坐:三人2109567cm;31480:14306495909:几人坐:单人1009567cm;31480:21480914361:几人坐:四人位2409567cm;31480:21480914362:几人坐:大四人3209576cm;31480:1387571900:几人坐:3米贵妃沙发;31480:32527954:几人坐:定制尺寸;1627207:28321:颜色分类:乳白色 尺寸颜色可定制;1627207:28321:颜色分类:乳白色 尺寸颜色可定制;1627207:28321:颜色分类:乳白色 尺寸颜色可定制;1627207:28321:颜色分类:乳白色 尺寸颜色可定制;1627207:28321:颜色分类:乳白色 尺寸颜色可定制;1627207:28321:颜色分类:乳白色 尺寸颜色可定制;1627207:28321:颜色分类:乳白色 尺寸颜色可定制;1627207:28321:颜色分类:乳白色 尺寸颜色可定制", "prop_imgs": { "prop_img": [ { "properties": "1627207:28321", "url": "img.alicdn.com/imgextra/i1…" } ] }, "props_imgs": { "prop_img": [ { "properties": "1627207:28321", "url": "img.alicdn.com/imgextra/i1…" } ] }, "property_alias": "", "props": [ { "name": "品牌", "value": "#0 工厂" }, { "name": "型号", "value": "520" },

这种方式主要有两个缺点:

列表获取不到商品详情图片,需要手动去抓取

过程比较繁琐,有很多需要手动操作的地方

这几天优化后的方法:

获取到的商品信息如下:

通过分类查询京东、淘宝的商品,比如搜索“电子产品”,获取到电子产品的列表。将首图带有京东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(.pnameaem).text().replace(/\s/g,""),marketprice:(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中的,这种相对来说比较麻烦,要一张一张复制