获取标头:
响应:服务器返回的数据
预览:查看响应得数据
载荷:查询参数/请求参数
标头:查看请求的网址/请求的标头/请求方法
数据包地址:https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2
一页的数据放在三个链接;
productIds::120个商品ID->找的商品的ID
获取商品所有ID.
-----------------------------------------------
"""
使用模块requestscsv
代码步骤发送请求获取数据解析数据保存数据
第一次请求:请求商品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文件。
----------------------------------------------