从客户需求到 API 落地:淘宝商品详情批量爬取与接口封装实践

简介: 本文详解如何用Python实现淘宝商品数据爬取并封装为API,支持传入商品ID即返回标题、价格、库存等结构化信息。结合Requests、Playwright与FastAPI,兼顾反爬应对与易用性,提供可复用的电商数据采集方案。


在电商数据分析、竞品监控等场景中,批量获取商品详情数据是高频需求。本文将完整还原一次技术落地过程 —— 从接收客户 “传商品 ID 即得详情” 的需求,到用 Python 实现爬虫核心逻辑,最终封装成可直接调用的 API,为类似需求提供可复用的技术方案。

一、需求拆解:明确核心目标与约束

客户是一家电商代运营公司,需要批量获取淘宝商品的标题、价格、库存、规格、详情图等信息,核心诉求有三个:

易用性:无需关心技术细节,仅传入商品 ID(如淘宝商品链接中的id=xxxxxx)即可返回数据;
稳定性:避免频繁被反爬拦截,确保批量请求时数据获取成功率;
结构化:返回 JSON 格式数据,方便直接导入 Excel 或接入客户内部系统。
同时需注意淘宝的反爬规则,避免使用高频请求、固定 IP 等易触发拦截的操作,这是技术实现的核心约束。

二、技术选型:轻量且高效的工具组合

针对需求特点,选择 “爬虫 + 后端框架” 的轻量组合,兼顾开发效率与运行稳定性,具体选型如下:

技术模块 工具 / 框架 选型理由
网络请求 Requests + Playwright Requests 处理接口请求,Playwright 应对动态渲染页面
数据解析 BeautifulSoup + JSON 解析 HTML 静态内容,直接处理接口返回的 JSON 数据
后端 API FastAPI 高性能、支持自动生成接口文档,开发效率远超 Flask
数据存储(可选) SQLite 轻量级文件数据库,无需部署,适合小批量数据缓存
反爬应对 随机 User-Agent + 延时 降低请求特征,避免触发淘宝反爬机制

三、核心实现:从爬虫到数据结构化

3.1 第一步:分析淘宝商品页面数据来源

淘宝商品详情页分为 “静态渲染” 和 “动态加载” 两部分,直接爬取页面 HTML 会丢失部分数据,需先通过浏览器抓包定位真实数据接口:

打开淘宝商品页(如https://item.taobao.com/item.htm?id=123456),按 F12 打开 “开发者工具”;
切换到 “Network” 标签,刷新页面,筛选 “XHR” 类型请求,查找包含 “item_get”“detail” 等关键词的接口;
分析接口请求参数(如id为商品 ID)和返回结果,确认该接口包含标题、价格、库存等核心字段(返回格式为 JSON)。
关键提醒:淘宝接口需携带登录后的 Cookie(包含用户身份信息),否则会返回登录拦截页,需提前获取并在请求头中配置。

3.2 第二步:编写爬虫核心代码

核心逻辑分为 “请求数据”“解析数据”“异常处理” 三部分,代码如下(含关键注释):

```import requests
import random
import time
from typing import Dict, Optional

1. 配置请求头(模拟浏览器,避免被识别为爬虫)

def get_headers() -> Dict:
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/115.0"
]
return {
"User-Agent": random.choice(user_agents),
"Cookie": "你的淘宝登录Cookie(从浏览器复制)", # 需替换为真实Cookie
"Referer": "https://item.taobao.com/"
}

2. 爬取单个商品详情

def crawl_taobao_item(item_id: str) -> Optional[Dict]:

# 淘宝商品详情接口(示例,实际需抓包确认最新接口)
url = f"https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?id={item_id}"
headers = get_headers()

try:
    # 加随机延时(1-3秒),降低反爬风险
    time.sleep(random.uniform(1, 3))
    response = requests.get(url, headers=headers, timeout=10)
    response.raise_for_status()  # 触发HTTP错误(如403、500)

    # 解析JSON数据,提取核心字段(字段名需按实际接口调整)
    data = response.json()
    item_info = data["data"]["itemInfoModel"]["itemInfo"]

    # 结构化返回结果(只保留客户需要的字段)
    return {
        "item_id": item_id,
        "title": item_info["title"],
        "price": item_info["price"],
        "stock": item_info["totalStock"],
        "sales_count": item_info["sellCount"],
        "shop_name": data["data"]["sellerInfoModel"]["sellerName"],
        "detail_images": [img["url"] for img in data["data"]["itemImageModel"]["largeImages"]]
    }

except Exception as e:
    print(f"爬取商品{item_id}失败:{str(e)}")
    return None

```

3.3 第三步:数据存储(可选)

若客户需要批量爬取后重复使用数据,可将结果存入 SQLite,避免重复请求触发反爬。示例代码如下:

import sqlite3

初始化数据库表

def init_db():
conn = sqlite3.connect("taobao_items.db")
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS items (
item_id TEXT PRIMARY KEY,
title TEXT,
price TEXT,
stock INTEGER,
sales_count INTEGER,
shop_name TEXT,
detail_images TEXT,
crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()

存储商品数据到数据库

def save_to_db(item_data: Dict):
conn = sqlite3.connect("taobao_items.db")
cursor = conn.cursor()

# 将图片列表转为字符串存储(取出时需用json.loads解析)
detail_images_str = ",".join(item_data["detail_images"])
cursor.execute('''
    INSERT OR REPLACE INTO items 
    (item_id, title, price, stock, sales_count, shop_name, detail_images)
    VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
    item_data["item_id"],
    item_data["title"],
    item_data["price"],
    item_data["stock"],
    item_data["sales_count"],
    item_data["shop_name"],
    detail_images_str
))
conn.commit()
conn.close()

四、API 封装:用 FastAPI 实现 “传 ID 得数据”
完成爬虫逻辑后,需将其封装成 API 接口,让客户无需运行代码,直接通过 HTTP 请求获取数据。

4.1 编写 API 核心代码
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel # 用于参数校验
import json

初始化FastAPI应用

app = FastAPI(title="淘宝商品详情API", version="1.0")

初始化数据库(若使用存储功能)

init_db()

定义请求参数模型(校验商品ID格式,可选)

class ItemRequest(BaseModel):
item_id: str

定义API接口:获取商品详情

@app.post("/taobao/item/detail", summary="根据商品ID获取淘宝详情")
def get_item_detail(request: ItemRequest):
item_id = request.item_id

# 1. 先查数据库,有缓存则直接返回(减少爬虫请求)
conn = sqlite3.connect("taobao_items.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM items WHERE item_id = ?", (item_id,))
db_data = cursor.fetchone()
conn.close()

if db_data:
    # 数据库数据转为JSON格式(处理图片列表)
    return {
        "item_id": db_data[0],
        "title": db_data[1],
        "price": db_data[2],
        "stock": db_data[3],
        "sales_count": db_data[4],
        "shop_name": db_data[5],
        "detail_images": db_data[6].split(","),
        "source": "数据库缓存"
    }

# 2. 数据库无缓存,调用爬虫获取数据
crawl_data = crawl_taobao_item(item_id)
if not crawl_data:
    raise HTTPException(status_code=400, detail=f"商品ID {item_id} 爬取失败,请检查ID有效性或稍后重试")

# 3. 存储到数据库(更新缓存)
save_to_db(crawl_data)
crawl_data["source"] = "实时爬取"
return crawl_data

启动API服务(需安装uvicorn:pip install uvicorn)

if name == "main":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
4.2 API 使用说明
启动服务:运行上述代码,执行命令uvicorn main:app --host 0.0.0.0 --port 8000(main为代码文件名);
测试接口:访问http://localhost:8000/docs,FastAPI 自动生成的接口文档中,可直接输入商品 ID 测试请求;
客户调用:通过 Postman、Python requests 或客户系统,向http://你的服务器IP:8000/taobao/item/detail发送 POST 请求,请求体如下:

{
"item_id": "123456789012" // 替换为真实淘宝商品ID
}
返回结果:接口会返回结构化 JSON 数据,包含商品所有核心字段,客户可直接解析使用。
五、落地优化:稳定性与可维护性提升
反爬策略升级:若频繁被拦截,可增加 “IP 代理池”(如使用阿布云、芝麻代理),替换固定 IP;
接口监控:添加日志记录(如用 loguru),记录请求成功 / 失败次数,方便排查问题;
批量请求支持:新增/taobao/item/batch_detail接口,支持传入多个商品 ID(如{"item_ids": ["123", "456"]}),批量返回数据;
Cookie 自动更新:通过 Playwright 模拟登录,定期自动更新 Cookie,避免手动替换的麻烦。

总结

从客户需求到 API 落地,核心是 “以易用性为目标,以稳定性为基础”。通过 “爬虫逻辑模块化 + FastAPI 轻量封装”,既解决了淘宝反爬与数据结构化问题,又让客户无需关心技术细节,仅通过商品 ID 即可快速获取数据。这种方案不仅可复用于淘宝,稍作调整后也适用于京东、拼多多等其他电商平台的商品数据爬取。

相关文章
|
7月前
|
数据采集 监控 API
合法获取淘宝商品数据:通过淘宝开放平台API的实践指南
本文介绍通过淘宝开放平台官方API合法获取商品数据的完整流程,强调禁止爬虫、遵守协议,确保合规调用商品详情、搜索等接口,规避法律与封号风险。
|
Android开发
autojs用ConnectivityManager实现网络监听
autojs用ConnectivityManager实现网络监听
1658 0
|
10月前
|
数据采集 监控 API
淘宝商品信息批量获取接口技术详解
本文介绍批量获取淘宝商品信息的两种方法:官方API与Python爬虫。涵盖应用场景、技术实现、代码示例及合规注意事项,助您高效采集标题、价格、销量等数据,用于市场分析与竞品监控,兼顾可行性与风险控制。(238字)
3075 0
|
10月前
|
JSON 缓存 API
Python采集淘宝商品详情数据,API接口系列json数据返回
根据开放平台文档和示例,以下是使用Python调用淘宝商品详情API获取JSON数据的完整实现方案:
|
4月前
|
存储 监控 安全
第三方电商数据 API 数据来源深度解析:合规与稳定背后的核心逻辑
本简介介绍第三方电商数据API的三大合规来源:官方授权(直连平台原生数据)、生态伙伴共享(整合物流/支付/SaaS等垂直数据)及公开数据合规采集,并强调严格清洗校验与场景化选型逻辑,助企业构建安全、精准、可用的数据分析底座。(239字)
|
8月前
|
JSON 搜索推荐 API
淘宝商品评论 API 返回数据参考(附解析与实战示例)
淘宝商品评论 API(核心接口如 taobao.item.review.get)是获取商品用户评价数据的官方通道,返回数据以 JSON 格式为主,结构规范且字段丰富,涵盖评论基础信息、用户画像、内容详情、多媒体信息等维度。本文将拆解通用返回结构、核心字段含义、多场景示例及解析注意事项,为开发者提供完整的数据参考指南。
|
4月前
|
数据采集 监控 API
淘宝店铺所有商品 API 接口全解析:批量获取全店商品数据(2026 最新版)
在电商数据采集与店铺管理场景中,批量获取淘宝店铺所有商品是核心需求之一。淘宝开放平台提供了标准化 API 接口,支持按店铺、类目、时间等维度拉取商品全量数据,涵盖标题、价格、SKU、库存、销量等关键字段。本文将从接口选型、参数配置、代码实现、数据解析全流程展开讲解,适用于店铺运营、ERP 系统对接、竞品分析等场景。
|
10月前
|
传感器 人工智能 算法
数字孪生智慧水务系统,三维立体平台,沃思智能
智慧水务系统融合物联网、数字孪生与AI技术,实现供水全流程智能监测、预测性维护与动态优化。通过实时数据采集与三维建模,提升漏损控制、节能降耗与应急响应能力,推动水务管理从经验驱动迈向数据驱动,助力城市水资源精细化、可持续化管理。
1511 143
|
10月前
|
存储 数据采集 搜索推荐
Python+淘宝API:3步爬取10万条商品评论(附反爬破解技巧)
本文介绍淘宝商品评论爬取技术,涵盖环境配置、接口分析、反爬破解及数据存储。使用Python模拟请求,动态代理与签名绕过风控,结合Flask中转降低封禁风险,实现高效合规的数据采集,适用于竞品分析与用户画像构建。(238字)
1804 1
|
10月前
|
JSON 监控 API
阿里妈妈 item_get 接口对接全攻略:从入门到精通
阿里妈妈item_get接口是淘宝客推广核心工具,支持获取商品详情、佣金、优惠券及销量等数据,广泛应用于选品、自动推广与佣金监控。本文详解接口对接流程、认证机制、Python代码实现及最佳实践,助力开发者高效构建合规推广系统。(239字)

热门文章

最新文章