Python 采集淘宝商品详情并生成 Excel 报表

简介: 你需要一份完整的 Python 实战指南,实现「采集淘宝商品详情 + 数据整理 + 生成 Excel 报表」的全流程,核心是在之前批量采集的基础上,新增 Excel 生成功能,同时保证报表格式整洁、数据完整,适合新手直接落地。这份指南会基于多线程采集方案(入门友好),整合 openpyxl 库(处理 Excel 最佳实践之一,支持 xlsx 格式,可自定义单元格样式),完成从数据采集到报表输出的闭环。

你需要一份完整的 Python 实战指南,实现「采集淘宝商品详情 + 数据整理 + 生成 Excel 报表」的全流程,核心是在之前批量采集的基础上,新增 Excel 生成功能,同时保证报表格式整洁、数据完整,适合新手直接落地。

这份指南会基于多线程采集方案(入门友好),整合 openpyxl 库(处理 Excel 最佳实践之一,支持 xlsx 格式,可自定义单元格样式),完成从数据采集到报表输出的闭环。

Python 采集淘宝商品详情并生成 Excel 报表

前置说明

  1. 核心依赖:在之前采集环境的基础上,新增处理 Excel 的 openpyxl 库(支持创建、编辑 xlsx 格式文件,自定义样式)。
  2. 前置准备:已获取淘宝开放平台 AppKey/AppSecret、接口权限、配置 IP 白名单(参考之前的入门指南)。
  3. 全流程目标:批量采集商品详情 → 整理结构化数据 → 生成规范 Excel 报表(含表头、数据、简单样式优化)。
  4. 合规提醒:仍需严格遵守淘宝 API 调用限制,禁止高频违规采集,数据仅用于合法场景。

安装新增依赖

bash

运行

pip install openpyxl  # 核心 Excel 处理库

完整实战代码

这份代码整合了「多线程批量采集」和「Excel 报表生成」,包含详细注释,新手可直接复制修改后运行。

python

运行

from topapi import TopApiClient
from topapi.api import TaobaoItemGetRequest
from concurrent.futures import ThreadPoolExecutor, as_completed
import time
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
# ---------------------- 全局配置项(替换为你自己的信息)----------------------
APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
SESSION_KEY = ""  # 公开接口留空即可
# 待采集的商品 num_iid 列表(可自行补充)
ITEM_NUM_IID_LIST = ["123456789", "987654321", "112233445"]
# 多线程配置
THREAD_POOL_SIZE = 5
REQUEST_DELAY = 0.5
# Excel 报表配置
EXCEL_FILENAME = "淘宝商品详情报表.xlsx"
# Excel 表头配置(列名 → 对应商品数据的 key)
EXCEL_HEADERS = {
    "商品ID": "num_iid",
    "商品标题": "title",
    "商品价格(元)": "price",
    "商品类目": "cat_name",
    "商品品牌": "brand_name",
    "主图链接": "pic_url"
}
# ---------------------- 1. 工具函数:初始化淘宝 API 客户端----------------------
def init_taobao_client():
    """初始化 TopApi 客户端,返回客户端实例"""
    try:
        client = TopApiClient(
            appkey=APP_KEY,
            appsecret=APP_SECRET,
            sessionkey=SESSION_KEY
        )
        print("✅ API 客户端初始化成功")
        return client
    except Exception as e:
        print(f"❌ 客户端初始化失败:{str(e)}")
        return None
# ---------------------- 2. 工具函数:采集单个商品详情----------------------
def get_single_item_detail(client, num_iid):
    """
    采集单个商品的基础详情数据,返回结构化字典
    :param client: TopApi 客户端实例
    :param num_iid: 商品 ID
    :return: 商品数据字典(采集失败返回 None)
    """
    if not client or not num_iid:
        return None
    
    # 添加请求延迟,避免触发 API 限流
    time.sleep(REQUEST_DELAY)
    
    try:
        # 构造 API 请求
        req = TaobaoItemGetRequest()
        req.num_iid = num_iid
        # 指定返回字段,与 EXCEL_HEADERS 对应,减少冗余数据
        req.fields = ",".join(EXCEL_HEADERS.values())
        
        # 发起请求并获取响应
        resp = client.execute(req)
        
        # 解析响应数据
        if resp.get("code") == 0:
            item_data = resp.get("item", {})
            # 提取核心字段,返回与表头对应的结构化数据
            result = {
                "num_iid": item_data.get("num_iid", num_iid),
                "title": item_data.get("title", "无标题"),
                "price": item_data.get("price", "0.00"),
                "cat_name": item_data.get("cat_name", "无类目"),
                "brand_name": item_data.get("brand_name", "无品牌"),
                "pic_url": item_data.get("pic_url", "无主图链接")
            }
            print(f"✅ 采集成功:{num_iid} - {result['title'][:20]}...")
            return result
        else:
            print(f"❌ 采集失败 {num_iid}:{resp.get('msg')}(错误码:{resp.get('code')})")
            return None
    except Exception as e:
        print(f"❌ 采集异常 {num_iid}:{str(e)}")
        return None
# ---------------------- 3. 工具函数:多线程批量采集商品数据----------------------
def batch_collect_item_data(client, item_num_iid_list):
    """
    多线程批量采集商品详情数据,返回采集成功的数据集
    :param client: TopApi 客户端实例
    :param item_num_iid_list: 商品 ID 列表
    :return: 成功采集的商品数据列表
    """
    if not client or not item_num_iid_list:
        return []
    
    start_time = time.time()
    success_data = []
    
    # 创建线程池并提交任务
    with ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE) as executor:
        # 建立「未来对象 - 商品 ID」映射,便于后续关联结果
        future_to_num_iid = {
            executor.submit(get_single_item_detail, client, num_iid): num_iid
            for num_iid in item_num_iid_list
        }
        
        # 遍历已完成的任务,收集成功结果
        for future in as_completed(future_to_num_iid):
            try:
                item_result = future.result()
                if item_result:
                    success_data.append(item_result)
            except Exception as e:
                num_iid = future_to_num_iid[future]
                print(f"❌ 任务执行异常 {num_iid}:{str(e)}")
    
    # 打印采集统计信息
    end_time = time.time()
    print(f"\n📊 批量采集完成!总耗时:{end_time - start_time:.2f} 秒")
    print(f"📊 成功采集:{len(success_data)} / {len(item_num_iid_list)} 个商品")
    
    return success_data
# ---------------------- 4. 工具函数:生成 Excel 报表----------------------
def generate_excel_report(item_data_list, filename=EXCEL_FILENAME):
    """
    将采集的商品数据生成 Excel 报表,支持简单样式优化
    :param item_data_list: 成功采集的商品数据列表
    :param filename: Excel 报表文件名
    :return: 生成成功返回 True,失败返回 False
    """
    if not item_data_list:
        print("❌ 无有效商品数据,无法生成 Excel 报表")
        return False
    
    try:
        # 1. 创建一个新的 Excel 工作簿
        wb = Workbook()
        ws = wb.active  # 获取当前活跃的工作表(默认第一个工作表)
        ws.title = "商品详情数据"  # 设置工作表名称
        
        # 2. 定义 Excel 样式(提升报表美观度)
        # 表头样式:加粗、居中、浅蓝色背景、黑色边框
        header_font = Font(bold=True, color="000000")
        header_alignment = Alignment(horizontal="center", vertical="center")
        header_fill = PatternFill(start_color="E6F3FF", end_color="E6F3FF", fill_type="solid")
        border = Border(
            left=Side(style="thin", color="CCCCCC"),
            right=Side(style="thin", color="CCCCCC"),
            top=Side(style="thin", color="CCCCCC"),
            bottom=Side(style="thin", color="CCCCCC")
        )
        
        # 3. 写入表头
        header_names = list(EXCEL_HEADERS.keys())
        for col, header_name in enumerate(header_names, start=1):
            cell = ws.cell(row=1, column=col, value=header_name)
            # 应用表头样式
            cell.font = header_font
            cell.alignment = header_alignment
            cell.fill = header_fill
            cell.border = border
        
        # 4. 写入商品数据
        for row, item_data in enumerate(item_data_list, start=2):
            for col, (_, data_key) in enumerate(EXCEL_HEADERS.items(), start=1):
                cell_value = item_data.get(data_key, "")
                cell = ws.cell(row=row, column=col, value=cell_value)
                # 应用数据单元格样式(居中、边框)
                cell.alignment = Alignment(horizontal="left", vertical="center")
                cell.border = border
        
        # 5. 调整列宽(自适应内容,提升可读性)
        for col in range(1, len(header_names) + 1):
            # 不同列设置不同基础宽度,适配内容
            if col == 2:  # 商品标题列,设置较宽
                ws.column_dimensions[chr(64 + col)].width = 50
            elif col == 6:  # 主图链接列,设置较宽
                ws.column_dimensions[chr(64 + col)].width = 60
            else:
                ws.column_dimensions[chr(64 + col)].width = 20
        
        # 6. 保存 Excel 文件
        wb.save(filename)
        print(f"\n✅ Excel 报表生成成功!文件路径:{filename}")
        return True
    except Exception as e:
        print(f"❌ Excel 报表生成失败:{str(e)}")
        return False
# ---------------------- 主函数:整合全流程----------------------
if __name__ == "__main__":
    # 步骤 1:初始化淘宝 API 客户端
    taobao_client = init_taobao_client()
    if not taobao_client:
        exit(1)
    
    # 步骤 2:多线程批量采集商品数据
    collected_item_data = batch_collect_item_data(taobao_client, ITEM_NUM_IID_LIST)
    if not collected_item_data:
        exit(1)
    
    # 步骤 3:生成 Excel 报表
    generate_excel_report(collected_item_data, EXCEL_FILENAME)

代码关键说明

1. 核心模块分工

全流程分为 4 个核心工具函数,职责清晰,便于新手理解和修改:

  1. init_taobao_client():初始化 API 客户端,为采集做准备。
  2. get_single_item_detail():采集单个商品数据,返回结构化字典。
  3. batch_collect_item_data():多线程批量采集,收集所有成功数据。
  4. generate_excel_report():将采集数据写入 Excel,优化报表样式。

2. Excel 处理核心要点(openpyxl 用法)

  1. 工作簿与工作表Workbook() 创建新工作簿,wb.active 获取默认工作表,ws.title 修改工作表名称。
  2. 数据写入ws.cell(row=行号, column=列号, value=值) 写入单个单元格,行号 / 列号从 1 开始(符合 Excel 操作习惯)。
  3. 样式优化:通过 Font(字体)、Alignment(对齐)、PatternFill(背景色)、Border(边框)优化报表美观度,避免生成无格式的原始表格。
  4. 列宽调整ws.column_dimensions[列字母].width 调整列宽,针对标题、链接等长内容列设置更大宽度,提升可读性。
  5. 文件保存wb.save(filename) 保存为 xlsx 格式文件,直接在代码运行目录生成。

3. 关键配置优化

  1. EXCEL_HEADERS 映射:表头名称与商品数据 key 一一对应,方便后续修改表头或调整返回字段,无需大面积改动代码。
  2. 请求字段与表头对应req.fields 直接使用 EXCEL_HEADERS 的 value 列表,减少冗余数据传输,提升采集效率。
  3. 列宽自适应:针对不同列的内容长度设置不同基础宽度,避免出现「内容被遮挡」的问题。

运行步骤与效果

1. 运行步骤

  1. 替换配置项中的 APP_KEYAPP_SECRETITEM_NUM_IID_LIST 为你自己的信息。
  2. 将代码保存为 taobao_item_excel.py
  3. 打开终端,进入代码保存目录,执行命令:bash
    运行
python taobao_item_excel.py
  1. 等待采集完成,终端会打印采集统计和 Excel 生成结果。

2. 运行效果

  1. 终端输出:依次打印「客户端初始化成功」「单个商品采集成功」「批量采集统计」「Excel 报表生成成功」。
  2. 文件生成:在代码运行目录下,会生成名为「淘宝商品详情报表.xlsx」的文件。
  3. Excel 内容
  • 工作表名称为「商品详情数据」。
  • 第一行为表头,加粗、居中、浅蓝色背景。
  • 后续行为商品数据,包含商品 ID、标题、价格等信息,带边框,列宽适配内容。
  • 可直接用 Excel、WPS 打开编辑,支持筛选、排序等后续操作。

常见问题排查

问题现象 常见原因 解决方案
Excel 报表生成失败,提示「No module named 'openpyxl'」 openpyxl 库未安装成功 重新执行 pip install openpyxl,检查终端安装提示
Excel 中无数据,仅表头 采集的商品数据为空,或数据 key 与表头映射不匹配 1. 检查采集是否成功(终端打印的成功数量)2. 核对 EXCEL_HEADERS 的 value 与商品数据 key 一致
商品标题被截断 Excel 列宽不足 修改 generate_excel_report() 中的列宽配置,增大商品标题列(第 2 列)的宽度
Excel 打开提示「文件损坏」 保存文件时出现异常(如权限不足、文件被占用) 1. 关闭已打开的同名 Excel 文件2. 检查代码运行目录是否有写入权限3. 更换 Excel 文件名重新运行
采集成功但 Excel 中部分字段为空 商品本身无该字段数据,或 API 未返回该字段 1. 核对 req.fields 中是否包含该字段2. 检查商品详情页是否有该信息(如部分商品无品牌)

进阶优化方向(落地必备)

  1. 添加数据筛选:生成 Excel 前,对采集数据进行去重、过滤(如过滤价格为 0 的商品)。
  2. 支持更多字段:扩展 EXCEL_HEADERSreq.fields,添加商品短卖点、库存等信息。
  3. 批量导出多个工作表:按商品类目拆分不同工作表,便于分类管理。
  4. 添加 Excel 公式:在 Excel 中添加总价计算、价格排序等公式,提升报表实用性。
  5. 异常重试与断点续采:若采集中途失败,支持从断点继续采集,避免重复工作,同时将失败的商品 ID 单独写入 Excel 工作表。

总结

核心要点回顾

  1. 全流程核心是「批量采集结构化数据 → 映射到 Excel 表头 → 写入并优化样式」,闭环落地无额外复杂操作。
  2. 新手快速上手的关键:使用 ThreadPoolExecutor 实现多线程采集,使用 openpyxl 实现 Excel 生成,二者均封装完善,无需深入底层。
  3. Excel 报表的实用性提升:通过表头映射、样式优化、列宽自适应,让生成的报表整洁、可直接用于后续分析。
  4. 合规与避坑:始终控制 API 调用频次避免限流,Excel 生成前检查数据有效性避免文件损坏。
  5. 核心依赖库:topapi(采集)、concurrent.futures(多线程)、openpyxl(Excel 处理),三者搭配满足从采集到报表的全部需求。

这份代码可直接用于小规模商品详情采集与报表生成,后续可根据实际需求扩展功能,提升实用性和健壮性。

相关文章
|
1天前
|
人工智能 自然语言处理 Shell
🦞 如何在 Moltbot 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 Moltbot 配置阿里云百炼 API
|
6天前
|
人工智能 API 开发者
Claude Code 国内保姆级使用指南:实测 GLM-4.7 与 Claude Opus 4.5 全方案解
Claude Code是Anthropic推出的编程AI代理工具。2026年国内开发者可通过配置`ANTHROPIC_BASE_URL`实现本地化接入:①极速平替——用Qwen Code v0.5.0或GLM-4.7,毫秒响应,适合日常编码;②满血原版——经灵芽API中转调用Claude Opus 4.5,胜任复杂架构与深度推理。
|
9天前
|
JSON API 数据格式
OpenCode入门使用教程
本教程介绍如何通过安装OpenCode并配置Canopy Wave API来使用开源模型。首先全局安装OpenCode,然后设置API密钥并创建配置文件,最后在控制台中连接模型并开始交互。
4527 8
|
15天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
10310 21
|
2天前
|
人工智能 自然语言处理 Cloud Native
大模型应用落地实战:从Clawdbot到实在Agent,如何构建企业级自动化闭环?
2026年初,开源AI Agent Clawdbot爆火,以“自由意志”打破被动交互,寄生社交软件主动服务。它解决“听与说”,却缺“手与脚”:硅谷Manus走API原生路线,云端自主执行;中国实在Agent则用屏幕语义理解,在封闭系统中精准操作。三者协同,正构建AI真正干活的三位一体生态。
2292 9
|
1天前
|
存储 安全 数据库
使用 Docker 部署 Clawdbot(官方推荐方式)
Clawdbot 是一款开源、本地运行的个人AI助手,支持 WhatsApp、Telegram、Slack 等十余种通信渠道,兼容 macOS/iOS/Android,可渲染实时 Canvas 界面。本文提供基于 Docker Compose 的生产级部署指南,涵盖安全配置、持久化、备份、监控等关键运维实践(官方无预构建镜像,需源码本地构建)。
1127 2
|
22小时前
|
机器人 API 数据安全/隐私保护
只需3步,无影云电脑一键部署Moltbot(Clawdbot)
本指南详解Moltbot(Clawdbot)部署全流程:一、购买无影云电脑Moltbot专属套餐(含2000核时);二、下载客户端并配置百炼API Key、钉钉APP KEY及QQ通道;三、验证钉钉/群聊交互。支持多端,7×24运行可关闭休眠。
|
17天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
2584 18
|
10天前
|
人工智能 前端开发 Docker
Huobao Drama 开源短剧生成平台:从剧本到视频
Huobao Drama 是一个基于 Go + Vue3 的开源 AI 短剧自动化生成平台,支持剧本解析、角色与分镜生成、图生视频及剪辑合成,覆盖短剧生产全链路。内置角色管理、分镜设计、视频合成、任务追踪等功能,支持本地部署与多模型接入(如 OpenAI、Ollama、火山等),搭配 FFmpeg 实现高效视频处理,适用于短剧工作流验证与自建 AI 创作后台。
1377 5