pageOffset参数的变化每120个数据翻一页嘛,ID都获取了,前面也看到每个商品数据接口对应的是50条数据,经过分析就知道 120个商品划分为是三个 50,50,20 分别传入相对应的商品ID就可以了。

实现代码


  • 获取每页商品ID值

for page in range(0, 1201, 120):

url = ‘https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank’

headers = {

‘referer’: ‘https://category.vip.com/suggest.php?keyword=%E5%8F%A3%E7%BA%A2&ff=235%7C12%7C1%7C1&page=3’,

‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36’

}

params = {

‘callback’: ‘getMerchandiseIds’,

‘app_name’: ‘shop_pc’,

‘app_version’: ‘4.0’,

‘warehouse’: ‘VIP_NH’,

‘fdc_area_id’: ‘104104101’,

‘client’: ‘pc’,

‘mobile_platform’: ‘1’,

‘province_id’: ‘104104’,

‘api_key’: ‘70f71280d5d547b2a7bb370a529aeea1’,

‘user_id’: ‘’,

‘mars_cid’: ‘1602569282048_0b4beb3d18306a0a0143c359ddb34fae’,

‘wap_consumer’: ‘a’,

‘standby_id’: ‘nature’,

‘keyword’: ‘口红’,

‘lv3CatIds’: ‘’,

‘lv2CatIds’: ‘’,

‘lv1CatIds’: ‘’,

‘brandStoreSns’: ‘’,

‘props’: ‘’,

‘priceMin’: ‘’,

‘priceMax’: ‘’,

‘vipService’: ‘’,

‘sort’: ‘0’,

‘pageOffset’: ‘{}’.format(page),

‘channelId’: ‘1’,

‘gPlatform’: ‘PC’,

‘batchSize’: ‘120’,

‘_’: ‘1603721644362’,

}

response = requests.get(url=url, params=params, headers=headers)

ids = re.findall(‘“pid”:“(.*?)”’, response.text, re.S)

  • 获取商品数据

def get_data(num_id):

data_url = ‘https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2’

headers = {

‘referer’: ‘https://category.vip.com/suggest.php?keyword=%E5%8F%A3%E7%BA%A2&ff=235%7C12%7C1%7C1&page=3’,

‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36’

}

params = {

‘callback’: ‘getMerchandiseDroplets2’,

‘app_name’: ‘shop_pc’,

‘app_version’: ‘4.0’,

‘warehouse’: ‘VIP_NH’,

‘fdc_area_id’: ‘104104101’,

‘client’: ‘pc’,

‘mobile_platform’: ‘1’,

‘province_id’: ‘104104’,

‘api_key’: ‘70f71280d5d547b2a7bb370a529aeea1’,

‘user_id’: ‘’,

‘mars_cid’: ‘1602569282048_0b4beb3d18306a0a0143c359ddb34fae’,

‘wap_consumer’: ‘a’,

‘productIds’: ‘{}’.format(num_id),

‘scene’: ‘search’,

‘standby_id’: ‘nature’,

‘extParams’: ‘{“stdSizeVids”:“”,“preheatTipsVer”:“3”,“couponVer”:“v2”,“exclusivePrice”:“1”,“iconSpec”:“2x”}’,

‘context’: ‘’,

‘_’: ‘1603721644366’,

}

response_2 = requests.get(url=data_url, params=params, headers=headers)

titles = re.findall(‘“title”:“(.*?)”’, response_2.text, re.S) # 标题

salePrice = re.findall(‘,“salePrice”:“(.*?)”,’, response_2.text, re.S) # 售价

marketPrice = re.findall(‘“marketPrice”:“(.*?)”’, response_2.text, re.S) # 原价

saleDiscount = re.findall(‘“saleDiscount”:“(.*?)”’, response_2.text, re.S) # 折扣

smallImage = re.findall(‘“smallImage”:“(.*?)”’, response_2.text, re.S) # 商品图片地址

lis = zip(titles, salePrice, marketPrice, saleDiscount, smallImage)

dit = {}

for li in lis:

dit[‘商品名字’] = li[0]

dit[‘售价’] = li[1]

dit[‘原价’] = li[2]

dit[‘折扣’] = li[3]

dit[‘商品图片地址’] = li[4]

print(dit)

  • 保存数据

f = open(‘唯品会商品数据.csv’, mode=‘a’, encoding=‘utf-8-sig’, newline=‘’)

csv_writer = csv.DictWriter(f, fieldnames=[‘商品名字’, ‘售价’, ‘原价’, ‘折扣’, ‘商品图片地址’])

csv_writer.writeheader()

csv_writer.writerow(dit)

其实数据接口里面还有其他的一些数据,但是这里只是为了演示就没有获取那么多数据了。

实现效果图


在这里插入图片描述

在这里插入图片描述
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

dnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐