跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

唯品会泳衣商品数据采集与可视化分析

综述由AI生成演示了使用 Python 爬取唯品会泳衣商品数据的流程。通过分析网络请求接口,构建请求参数获取商品 ID 列表,进而批量抓取商品详情并存储为 CSV。随后利用 Pandas 进行数据处理,结合 PyEcharts 库绘制品牌分布饼图、售价平均柱状图及价格区间分布图,实现商品数据的直观可视化分析。

remedios发布于 2025/2/7更新于 2026/6/221 浏览
唯品会泳衣商品数据采集与可视化分析

引言

唯品会是中国领先的在线特卖电商平台,提供品牌折扣商品。本文以爬取唯品会泳衣商品数据为例,演示从接口分析、数据抓取到可视化展示的全流程。

数据来源分析

1. 明确需求

  • 采集网站: https://category.vip.com/
  • 目标数据: 商品信息(标题、价格、品牌等)

2. 抓包分析

使用浏览器开发者工具(F12 / Network)进行分析:

  1. 刷新网页触发数据加载。
  2. 搜索关键字定位数据包。
  3. 发现数据分批次返回(如前 50 条、中 50 条、后 20 条),需通过分页或 ID 列表批量获取。
  4. 关键参数包括 keyword(关键词)、pageOffset(页码)、batchSize(批次大小)等。

代码实现步骤

环境准备

确保安装必要的库:

pip install requests pandas pyecharts

发送请求与解析

定义请求头模拟浏览器行为,设置 Referer 防止防盗链。通过 API 获取商品 ID 列表,再分批请求详细信息。

import requests
import csv
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie

# 请求头配置
headers = {
    'Referer': 'https://category.vip.com/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}

# 第一步:获取商品 ID 列表
url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank'
data = {
    'app_name': 'shop_pc',
    'app_version': '4.0',
    'warehouse': 'VIP_HZ',
    'fdc_area_id': '104103101',
    'client': ,
    : ,
    : ,
    : ,
    : ,
    : ,
    : ,
    : ,
    : ,
    : ,
}

response = requests.get(url=url, params=data, headers=headers)
products = [i[]  i  response.json()[][]]


product_id_list = [
    .join(products[:]),
    .join(products[:]),
    .join(products[:])
]


 (, mode=, encoding=, newline=)  f:
    fieldnames = [, , , , , , ]
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    
     product_ids  product_id_list:
        link = 
        params = {
            : ,
            : ,
            : ,
            : ,
            : ,
            : ,
            : ,
            : ,
            : product_ids,
            : ,
            : ,
            : ,
        }
        json_data = requests.get(url=link, params=params, headers=headers).json()
        
         item  json_data[][]:
            
            attrs = .join([j[]  j  item.get(, [])])
            
            row = {
                : item[],
                : item[],
                : item[][],
                : item[][],
                : item[][],
                : attrs,
                : ,
            }
            writer.writerow(row)
            (row)
'pc'
'mobile_platform'
'1'
'province_id'
'104103'
'api_key'
'70f71280d5d547b2a7bb370a529aeea1'
'keyword'
'泳衣'
'sort'
'0'
'pageOffset'
'0'
'channelId'
'1'
'gPlatform'
'PC'
'batchSize'
'120'
'pid'
for
in
'data'
'products'
# 将商品 ID 分组处理(避免单次请求过多)
','
50
','
50
100
','
100
# 第二步:获取商品详情并保存
with
open
'商品.csv'
'w'
'utf-8-sig'
''
as
'标题'
'品牌'
'原价'
'售价'
'折扣'
'商品信息'
'详情页'
for
in
'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2'
'app_name'
'shop_pc'
'app_version'
'4.0'
'warehouse'
'VIP_HZ'
'fdc_area_id'
'104103101'
'client'
'pc'
'mobile_platform'
'1'
'province_id'
'104103'
'api_key'
'70f71280d5d547b2a7bb370a529aeea1'
'productIds'
'scene'
'search'
'standby_id'
'nature'
'extParams'
'{"stdSizeVids":"","preheatTipsVer":"3","couponVer":"v2","exclusivePrice":"1","iconSpec":"2x","ic2label":1,"superHot":1,"bigBrand":"1"}'
for
in
'data'
'products'
# 提取属性信息
','
'value'
for
in
'attrs'
'标题'
'title'
'品牌'
'brandShowName'
'原价'
'price'
'marketPrice'
'售价'
'price'
'salePrice'
'折扣'
'price'
'mixPriceLabel'
'商品信息'
'详情页'
f'https://detail.vip.com/detail-{item["brandId"]}-{item["productId"]}.html'
print

数据可视化

读取数据

df = pd.read_csv('商品.csv')
print(df.head())

商品品牌分布占比

统计各品牌商品数量,绘制饼图。

shop_num = df['品牌'].value_counts().to_list()
shop_type = df['品牌'].value_counts().index.to_list()

c = (
    Pie()
    .add("", [list(z) for z in zip(shop_type, shop_num)])
    .set_global_opts(
        title_opts=opts.TitleOpts(title="商品品牌分布占比"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical")
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c.render_notebook()

各大品牌商品平均售价

按品牌分组计算平均售价,绘制柱状图。

avg_price = df.groupby('品牌')['售价'].mean()
ShopType = avg_price.index.tolist()
ShopNum = [int(a) for a in avg_price.values.tolist()]

c = (
    Bar()
    .add_xaxis(ShopType)
    .add_yaxis("", ShopNum)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="各大品牌商品平均售价"),
        visualmap_opts=opts.VisualMapOpts(
            dimension=1, pos_right="5%", max_=30, is_inverse=True
        ),
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45))
    )
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_="min", name="最小值"),
                opts.MarkLineItem(type_="max", name="最大值"),
                opts.MarkLineItem(type_="average", name="平均值"),
            ]
        )
    )
)
c.render_notebook()

售价价格区间分布

根据售价数值划分区间,分析价格段分布情况。

# 假设根据实际数据划分区间
bins = [0, 100, 200, 500, 1000, float('inf')]
bins_labels = ['0-100', '100-200', '200-500', '500-1000', '1000+']
df['价格区间'] = pd.cut(df['售价'], bins=bins, labels=bins_labels)
interval_counts = df['价格区间'].value_counts().sort_index()

pie_data = list(zip(interval_counts.index.tolist(), interval_counts.values.tolist()))
pie1 = (
    Pie(init_opts=opts.InitOpts(theme='dark', width='1000px', height='600px'))
    .add('', pie_data, radius=['35%', '60%'])
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="唯品会泳衣商品售价价格区间",
            pos_left='center',
            pos_top='center',
            title_textstyle_opts=opts.TextStyleOpts(color='#F0F8FF', font_size=20, font_weight='bold')
        )
    )
    .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8'])
)
pie1.render_notebook()

总结

本文完整展示了利用 Python 进行网络爬虫开发及数据可视化的实践过程。通过逆向分析接口参数,实现了高效的数据抓取;结合 Pandas 与 PyEcharts,完成了对商品品牌、价格等维度的深度分析。该方法可迁移至其他电商平台的商品数据分析场景。

目录

  1. 引言
  2. 数据来源分析
  3. 1. 明确需求
  4. 2. 抓包分析
  5. 代码实现步骤
  6. 环境准备
  7. 发送请求与解析
  8. 请求头配置
  9. 第一步:获取商品 ID 列表
  10. 将商品 ID 分组处理(避免单次请求过多)
  11. 第二步:获取商品详情并保存
  12. 数据可视化
  13. 读取数据
  14. 商品品牌分布占比
  15. 各大品牌商品平均售价
  16. 售价价格区间分布
  17. 假设根据实际数据划分区间
  18. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2026 年 Python 发展局势:AI 时代的通用基础设施语言
  • JDK、IDEA 与 Maven 安装及配置指南
  • Linux 匿名管道:从 pipe 调用到通信测试及原理剖析
  • Web 自动化测试入门:核心概念与 Selenium 实战指南
  • OpenClaw 基础:Telegram 机器人配置与加入群聊
  • Linux 进程间通信进阶:消息队列与信号量详解
  • 微服务容器化与云原生部署:Docker 和 Kubernetes 实战
  • OVITO-Python 处理 LAMMPS 轨迹:统计原子 X 方向密度分布及扩展
  • 基于 Coze 抓取小红书笔记信息并同步至飞书多维表
  • Python 常见报错及解决方案梳理
  • RocketMQ Java 生态消息中间件实战详解
  • Java 集成 Umi-OCR 实现本地图片文字提取
  • STL 逆向工程:从三角网格到参数化 CAD 的转换
  • Java 十大常用框架详解
  • 基于 Text-CNN 的中文文本情感识别系统设计
  • Rust 异步编程实战:构建高性能 WebSocket 服务
  • C++ 类的 6 个默认成员函数与运算符重载
  • ThinkPHP 和 Laravel 框架的基于 Web 的在线考试答题游戏设计与实现
  • Supabase 实战指南:数据库、SDK 与本地部署
  • 声源定位算法基础:常规波束形成(CBF)原理

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online