作者:昼夜
关键词:监听、SKU
SKU作为商品的唯一标识,可以帮助商家提高订单处理效率,优化客户体验,并基于销售数据制定有效的营销策略,对于订单处理、客户服务、营销策略和数据分析等方面起着核心作用。而淘宝商品SKU信息的获取更是每个电商不可绕开的一环,但平时在模拟人工进行采集的时候通常会遇到诸如验证码、收集不全、风控等问题,想要完整的采集时比较困难的,在本文中会介绍如何通过监听以及请求的方式,比较快速的去整合SKU信息。
1.网页监听
我们都知道页面内容的加载过程其实就是浏览器与平台服务器交互加载的一个过程,其中页面上展示的数据会以数据包的形式传输过来,所以我们可以在数据传输过来的时候直接抓到这个包进行SKU的获取。
通过在开发者工具中直接搜索商品的关键字,我们可以找到与服务端返回过来的数据包,通过观察我们可以发现,其中的数据就是在页面上展示的信息。
但其实光是商品的名称信息还是不够的,我们还需要抓到具体的分类,这些信息与商品名称相同,都存在于这个https://h5api.m.tmall.com/h5/mtop.taobao.pcdetail.data.get/1.0/?jsv=2.7.4&appKey=12574478*资源路径的数据包中。通过搜索分析,我们可以发现在所得的json中,在['data']['skuBase']['props']中分别存在着”颜色分类“与”类型“的具体信息,而其中”颜色分类“和”类型“会各有一个整体的pid,对应不同的详情商品和类型又会有各自的vid。
"props": [
{
"comboProperty": "false",
"hasImage": "true",
"name": "颜色分类",
"nameDesc": "(2)",
"packProp": "false",
"pid": "1627207",
"values": [
{
"comboPropertyValue": "false",
"image": "https://gw.alicdn.com/bao/uploaded/i4/1669329204/O1CN013QVY4p2HrTv02FLwp_!!1669329204.jpg",
"name": "C19-C20 1.5平方",
"sortOrder": "1",
"vid": "941448306"
},
{
"comboPropertyValue": "false",
"image": "https://gw.alicdn.com/bao/uploaded/i3/1669329204/O1CN01Lu7Aa32HrTuxJ4GSv_!!1669329204.jpg",
"name": "C19-C20 2.5平方",
"sortOrder": "2",
"vid": "4295363003"
}
]
},
{
"comboProperty": "false",
"hasImage": "false",
"name": "长度",
"packProp": "false",
"pid": "122216547",
"values": [{
"comboPropertyValue": "false",
"name": "1.5m",
"sortOrder": "0",
"vid": "65793"
},
{
"comboPropertyValue": "false",
"name": "1.8m",
"sortOrder": "3",
"vid": "66993"
},
{
"comboPropertyValue": "false",
"name": "3M",
"sortOrder": "4",
"vid": "27961"
},
{
"comboPropertyValue": "false",
"name": "5m",
"sortOrder": "5",
"vid": "75369547"
}
]
}
],
在了解pid与vid的对应关系之后,我们可以在['data']['skuBase']['sku']这个路径中进行观察,会发现商品组合其实都是以”pid:vid“的格式进行存放的,其中propPath键对应的值里面分两块内容,分号之前的是商品名称的”pid:vid“组合,之后的是类型的”pid:vid“组合。在这里对应还会保存着一个skuId,而这个skuId则是可以去['data']['skuCore']['sku2info'](这里存放的是所有商品的价格详情信息)路径下找到对应的价格信息。
"skus": [{
"propPath": "1627207:941448306;122216547:65793",
"skuId": "5137385879331"
},
{
"propPath": "1627207:4295363003;122216547:65793",
"skuId": "5137385879330"
},
{
"propPath": "1627207:941448306;122216547:66993",
"skuId": "4954264100881"
},
{
"propPath": "1627207:4295363003;122216547:66993",
"skuId": "4954264100880"
},
{
"propPath": "1627207:941448306;122216547:27961",
"skuId": "4121914009508"
},
{
"propPath": "1627207:4295363003;122216547:27961",
"skuId": "4121914009505"
},
{
"propPath": "1627207:941448306;122216547:75369547",
"skuId": "4121914009509"
},
{
"propPath": "1627207:4295363003;122216547:75369547",
"skuId": "4121914009506"
}
]
}
经过对这些信息的分析,我们大概可以知道如何进行的SKU信息的获取了,可以总结出步骤如下:
1.通过遍历['data']['skuBase']['props'],生成pid与vid以及商品名称name的字典。
{'1627207': {'941448306': 'C19-C20 1.5平方', '4295363003': 'C19-C20 2.5平方'}, '122216547': {'65793': '1.5m', '66993': '1.8m', '27961': '3M', '75369547': '5m'}}
2.遍历['data']['skuBase']['skus']中所有的sku组合,通过拆分propPath获取商品的详细名称以及类型,再通过skuID去去['data']['skuCore']['sku2info']中找到对应的['price']['priceText'],得到商品的价格。
那么在知道了这个逻辑之后,我们可以在影刀中进行具体的实现,具体的实现过程及流程截图如下:
1.对于https://h5api.m.tmall.com/h5/mtop.taobao.pcdetail.data.get/1.0/?*这个资源路径URL进行监听,获取到服务端返回的特定的数据包。
2.对于数据包中的’body‘进行json对象转换并整理。
3.根据前面讲述的步骤进行操作,循环生成组合字典。
4.根据skuId查找具体的商品价格以及其他信息,写入至Excel表格中进行保存。
2.通过向对方服务器发送请求获取
淘系的信息方法基本上都与该文章中讲述的类似,我们只需要改换URL以及请求的data参数即可
数据包在监听获取到的时候是mtopjsonp格式的,可能需要先进行一些格式类型的转换(正则提取、拆分等)之后才能将其变换成json对象。