Python 爬虫实战:抓取淘宝商品数据与基础分析
前言
在电商数据分析领域,获取商品销量、价格分布及商家信息是市场调研的基础。本文以"小鱼零食"为例,演示如何使用 Python 调用接口获取淘宝搜索结果数据,并对数据进行清洗与分析,包括价格区间统计、商家地域分布、用户评论分析及热门店铺筛选。
本文介绍了使用 Python 进行淘宝商品数据爬取与分析的完整流程。通过调用第三方接口获取商品列表,解析 JSON 数据,进而统计不同价格区间的销量分布、商家地域分布及热门店铺信息。内容涵盖请求构建、响应处理及基础数据分析逻辑,旨在帮助开发者掌握电商数据采集与清洗的基本方法。

在电商数据分析领域,获取商品销量、价格分布及商家信息是市场调研的基础。本文以"小鱼零食"为例,演示如何使用 Python 调用接口获取淘宝搜索结果数据,并对数据进行清洗与分析,包括价格区间统计、商家地域分布、用户评论分析及热门店铺筛选。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
本次任务主要包含以下四个核心目标:
由于直接爬取淘宝官网存在反爬机制复杂、协议加密等问题,实际开发中常使用第三方开放平台提供的 API 接口进行数据获取。本示例基于通用的搜索接口结构进行演示。
接口通常支持以下关键参数:
q: 搜索关键词(如'小鱼零食')start_price / end_price: 价格区间过滤page: 当前页码page_size: 每页返回数量key / secret: 认证凭证使用 Python 的 requests 库发起 HTTP 请求。注意处理异常并设置合理的 User-Agent 以避免被拦截。
import requests
import json
from typing import List, Dict
def fetch_taobao_items(keyword: str, page: int = 1, api_key: str = "YOUR_KEY", api_secret: str = "YOUR_SECRET") -> Dict:
url = "https://api.example.com/taobao/item_search"
params = {
"key": api_key,
"secret": api_secret,
"q": keyword,
"start_price": 0,
"end_price": 0,
"page": page,
"cat": 0,
"sort": "sales_desc"
}
headers = {
"Accept-Encoding": "gzip",
"Connection": "close",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
try:
response = requests.get(url, params=params, headers=headers, timeout=10)
response.raise_for_status()
return response.json()
except Exception as e:
print(f"Request failed: {e}")
return {}
接口返回通常为 JSON 格式,核心字段位于 items.item 数组中。每个商品对象包含标题、图片、价格、销量、店铺信息等。
{
"items": {
"page": "1",
"total_results": 326348000,
"item": [
{
"title": "【小鱼】上脚超舒适的经典款平底鞋 SF 女鞋",
"pic_url": "https://img.alicdn.com/imgextra/i3/O1CN01l3hGlF24e7WhMs6gx_!!2960437415.jpg",
"promotion_price": "288.00",
"price": "888.00",
"sales": 10,
"num_iid": "648682556542",
"seller_nick": null,
"detail_url": "https://item.taobao.com/item.htm?id=648682556542"
},
{
"title": "四洲 粟一烧香脆粟米条 85g*3 桶",
"promotion_price": "27.60",
"price": "27.60",
"sales": 12,
"seller_nick": "常乐百货",
"detail_url": "https://item.taobao.com/item.htm?id=600485873570"
}
]
}
}
获取原始数据后,需进行清洗和统计分析。建议使用 pandas 库构建 DataFrame 以提高效率。
将价格转换为浮点数,按预设区间(如 0-10, 10-30, 30-50 等)分组计数。
import pandas as pd
def analyze_price_distribution(data_list: List[Dict]) -> pd.DataFrame:
df = pd.DataFrame(data_list)
# 确保价格为数值类型
df['price'] = pd.to_numeric(df['price'], errors='coerce')
# 定义价格区间
bins = [0, 10, 30, 50, 100, float('inf')]
labels = ['0-10', '10-30', '30-50', '50-100', '100+']
df['price_range'] = pd.cut(df['price'], bins=bins, labels=labels)
# 统计各区间商品数量
distribution = df.groupby('price_range').size().reset_index(name='count')
return distribution
虽然部分接口可能不直接返回详细地址,但可通过店铺名或 ID 关联外部数据库获取地域信息。此处演示如何提取 Top N 店铺。
def get_top_sellers(data_list: List[Dict], top_n: int = 10) -> pd.DataFrame:
df = pd.DataFrame(data_list)
# 填充缺失的店铺名
df['seller_nick'] = df['seller_nick'].fillna('未知店铺')
# 按店铺聚合销量
seller_stats = df.groupby('seller_nick')['sales'].sum().reset_index()
seller_stats.columns = ['shop_name', 'total_sales']
# 排序并取前 N 名
top_sellers = seller_stats.sort_values(by='total_sales', ascending=False).head(top_n)
return top_sellers
若需分析用户评论,需额外调用详情页接口获取评论列表。此处简述流程:
分析完成后,可使用 matplotlib 或 pyecharts 生成图表。
import matplotlib.pyplot as plt
def plot_price_chart(distribution_df):
plt.figure(figsize=(10, 6))
plt.bar(distribution_df['price_range'], distribution_df['count'])
plt.title('Price Distribution of Snacks')
plt.xlabel('Price Range')
plt.ylabel('Count')
plt.show()
通过上述步骤,我们完成了从数据采集到分析可视化的全流程。关键点在于:
此方案可作为电商竞品分析的基础框架,开发者可根据实际需求扩展地域匹配、评论挖掘等功能。