获取标头:
响应:服务器返回的数据
预览:查看响应得数据
载荷:查询参数/请求参数
标头:查看请求的网址/请求的标头/请求方法
数据包地址:https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2
一页的数据放在三个链接;
productIds::120个商品ID->找的商品的ID
获取商品所有ID.
-----------------------------------------------
"""
使用模块
requests
csv
代码步骤
发送请求
获取数据
解析数据
保存数据
第一次请求:请求商品ID数据包
->获取120个商品ID
第二次请求:获取商品详细数据链接
"""
# 导入数据请求
import requests
# 导入正则
import re
# 导入csv
import csv
# 创建文件对象
f=open('7_vip商品.csv',mode='w',encoding='utf-8',newline='')
csv_write=csv.DictWriter(f,fieldnames=['标题','品牌','原价','折扣','售价'])
# 发送请求 模拟浏览器
headers={
'Referer':'https://category.vip.com/'
,'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
}
url='https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank'
# 查询参数
data= {
'callback':'getMerchandiseIds',
'app_name':'shop_pc',
'app_version':'4.0',
'warehouse':'VIP_BJ',
'fdc_area_id':'101101101',
'client':'pc',
'mobile_platform':'1',
'province_id':'101101',
'api_key':'70f71280d5d547b2a7bb370a529aeea1',
'user_id':'',
'mars_cid':'1713279016912_3b96c6831122abbb85e7319098623bdb',
'wap_consumer':'a',
'standby_id':'nature',
'keyword':'口红',
'lv3CatIds':'',
'lv2CatIds':'',
'lv1CatIds':'',
'brandStoreSns':'',
'props':'',
'priceMin':'',
'priceMax':'',
'vipService':'',
'sort':'0',
'pageOffset':'0',
'channelId':'1',
'gPlatform':'PC',
'batchSize':'120',
'_':'1713279066798'
}
# 发送请求
response=requests.get(url=url,params=data,headers=headers)
# 获取服务器返回的响应数据
"""
response.text
获取响应文本数据
response.json()
获取想的json数据->数据是由{}/[]包裹起来的
response.content
获取响应二进制数据 ->图片/视频/音频/特定格式
"""
info = response.text
# 解析数据
products=re.findall('"pid":"(\d+)"',info)
# 对商品ID进行切片处理
string_1=','.join(products[:50]) # 提取前50个ID
string_2=','.join(products[50:100]) # 中间50个ID
string_3=','.join(products[100:]) # 后
def GetInfo(productIds):
# 第二次请求
link='https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2'
# 查询参数
params={
'app_name':'shop_pc',
'app_version':'4.0',
'warehouse':'VIP_BJ',
'fdc_area_id':'101101101',
'client':'pc',
'mobile_platform':'1',
'province_id':'101101',
'api_key':'70f71280d5d547b2a7bb370a529aeea1',
'user_id':'',
'mars_cid':'1713279016912_3b96c6831122abbb85e7319098623bdb',
'wap_consumer':'a',
'productIds':productIds,
'scene':'search',
'standby_id':'nature',
'extParams':'{"stdSizeVids":"","preheatTipsVer":"3","couponVer":"v2","exclusivePrice":"1","iconSpec":"2x","ic2label":1,"superHot":1,"bigBrand":"1"}',
'context':'',
'_':'1713279066807',
}
# 发送请求
json_date=requests.get(url=link,params=params,headers=headers).json()
# 解析数据 字典取值
for index in json_date['data']['products']:
dit={
'标题':index['title'],
'品牌':index['brandShowName'],
'原价':index['price']["marketPrice"],
'折扣':index['price']["saleDiscount"],
'售价':index['price']["marketPrice"],
}
csv_write.writerow(dit)
print(dit)
print(json_date)
# 前50条
GetInfo(productIds=string_1)
GetInfo(productIds=string_2)
GetInfo(productIds=string_3)
#
使用模块
requests
: 用于发送网络请求和获取数据。csv
: 用于读写CSV文件。
代码步骤
- 发送请求:向服务器发送请求,并获取数据。
- 解析数据:通过正则表达式解析响应文本,提取商品ID。
- 保存数据:将解析后的数据保存到CSV文件中。
第一次请求:请求商品ID数据包
- 发送GET请求至指定URL,携带指定查询参数。
- 获取服务器返回的响应数据,使用正则表达式提取商品ID。
第二次请求:获取商品详细数据链接
- 构建第二次请求的URL和查询参数。
- 发送GET请求至第二次链接,获取商品详细数据。
- 解析JSON格式的数据,提取商品的详细信息并写入CSV文件。
----------------------------------------------