在电商数据分析、市场调研等场景中,淘宝商品数据采集是一项常见需求。本文将分别使用 Node.js 和 Python 两种主流编程语言,从零构建一个简易的淘宝商品数据采集器,帮助大家理解网络请求、数据解析等核心技术环节。采集器将实现关键词搜索商品、提取商品核心信息(名称、价格、销量、店铺名等)以及数据存储功能,同时会强调合规采集的注意事项。
一、采集前的准备工作
在开始编写代码前,需完成以下基础准备,避免因环境或配置问题导致采集失败:
1. 核心技术原理
淘宝商品列表页的数据加载方式分为两种:
静态 HTML 渲染:部分页面直接将商品数据嵌入 HTML 源码中,可通过解析 HTML 获取;
动态 AJAX 加载:大部分页面(如滚动加载、分页)通过 JavaScript 请求接口获取 JSON 数据,需分析接口参数并模拟请求。
本文将以动态 AJAX 接口为例(更贴近真实场景),通过浏览器开发者工具捕获商品列表接口,提取请求参数后模拟发送请求。
2. 环境与工具准备
Node.js 环境(Node.js 方案):安装 Node.js(建议 v14+),配套使用axios(发送 HTTP 请求)、cheerio(解析 HTML)、jsonfile(存储 JSON 数据);
Python 环境(Python 方案):安装 Python(建议 3.8+),配套使用requests(发送 HTTP 请求)、lxml(解析 HTML/XML)、pandas(数据存储为 Excel);
浏览器开发者工具:Chrome/Firefox 的 F12 工具,用于捕获淘宝商品列表接口、分析请求头和参数;
代理 IP(可选):频繁请求可能导致 IP 被限制,可准备代理池避免封禁(本文暂不实现代理,仅提供思路)。
3. 合规性说明
淘宝有明确的robots.txt协议,禁止未经授权的批量数据采集;
本文代码仅用于技术学习,请勿用于商业用途或高频请求,避免违反平台规则;
若需合法采集电商数据,建议申请接口。
二、Node.js 实现方案
Node.js 凭借异步 I/O 特性,在网络请求场景中表现高效。以下是完整的采集流程实现:
1. 项目初始化与依赖安装
首先创建项目文件夹,执行以下命令安装依赖:
2. 核心代码实现
创建collector.js文件,代码分为请求配置、数据解析、数据存储三部分:
3. 代码说明与运行
请求头配置:User-Agent模拟浏览器,Cookie需从登录后的淘宝页面复制(F12→Application→Cookies),否则可能返回登录页面;
数据解析:使用cheerio(类似 jQuery)提取商品 DOM 元素,class 名称需通过开发者工具确认(淘宝可能会动态调整 class,需及时更新);
运行方式:在终端执行node collector.js,采集完成后会在项目根目录生成taobao_products_nodejs.json文件,包含商品列表数据。
三、Python 实现方案
Python 凭借丰富的数据分析库,在数据处理和存储上更具优势。以下是 Python 版本的采集实现:
1. 环境搭建与依赖安装
创建项目文件夹,执行以下命令安装依赖:
2. 核心代码实现
创建文件,代码逻辑与 Node.js 一致,但数据存储为 Excel 格式(更便于后续分析):
3. 代码说明与运行
数据解析:使用lxml的 XPath 语法,比 Node.js 的cheerio更灵活,XPath 路径可通过 Chrome 开发者工具直接复制(右键元素→Copy→Copy XPath);
数据存储:借助pandas将数据保存为 Excel 格式,便于后续用 Excel 或 Python 进行数据分析(如价格分布统计、销量排序等);
运行方式:在终端执行python ,采集完成后生成taobao_products_python.xlsx文件,可直接用 Excel 打开查看。
四、进阶优化与注意事项
1. 常见问题与解决方案
IP 被限制:淘宝会检测高频请求的 IP,解决方案包括:
增加请求间隔(在代码中加入time.sleep(2),避免每秒多次请求);
使用代理 IP 池(如requests搭配proxies参数,Node.js 搭配axios的proxy配置);
页面动态加载:若商品数据通过 AJAX 动态加载(如滚动加载),需分析接口参数(如pageNum、timestamp、sign等),部分参数可能需要加密(如淘宝的sign参数,需逆向分析 JS 加密逻辑);
Cookie 过期:Cookie 有效期通常为几天,过期后需重新从浏览器复制更新。
2. 功能进阶扩展
多页采集:循环修改page参数,实现批量采集多页商品数据;
数据去重:通过商品 ID(需从接口中提取)去重,避免重复采集;
可视化分析:使用 Python 的matplotlib或seaborn绘制商品价格分布直方图、销量 Top10 店铺柱状图等;
定时采集:结合node-schedule(Node.js)或schedule(Python)实现定时自动采集,监控商品价格变化。
五、总结
本文分别使用 Node.js 和 Python 实现了淘宝商品数据采集器,核心流程均为 **“模拟请求→解析数据→存储数据”**,但各有优势:
Node.js:适合需要高并发请求的场景,异步 I/O 效率高,适合与前端项目结合;
Python:数据处理和可视化生态更完善,适合后续的数据分析工作。
再次强调,请勿将采集代码用于商业用途或高频请求,遵守平台规则和法律法规是技术实践的前提。若需深入电商数据采集,建议研究淘宝 API,通过合法渠道获取数据。