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

Python 爬虫实战:使用 Selenium 自动化获取淘宝商品数据

介绍如何使用 Python 和 Selenium 库实现淘宝商品数据的自动化采集。内容涵盖环境配置、浏览器驱动初始化、搜索定位、登录模拟、数据解析及 CSV 存储流程。同时包含反爬策略说明与代码优化建议,帮助开发者构建稳定的爬虫脚本。注意数据采集需遵守法律法规及网站服务条款。

2177283801发布于 2025/2/6更新于 2026/6/318 浏览
Python 爬虫实战:使用 Selenium 自动化获取淘宝商品数据

Python 爬虫实战:使用 Selenium 自动化获取淘宝商品数据

前言

随着互联网电商的发展,获取公开的商品数据对于市场分析具有重要意义。本文将演示如何利用 Python 的 Selenium 库模拟浏览器行为,自动访问淘宝并提取商品信息。请注意,本教程仅用于学习技术原理,实际应用中请严格遵守目标网站的 robots.txt 协议及相关法律法规,避免高频请求导致封禁或法律风险。

环境准备

确保已安装以下组件:

  • Python 3.6 及以上版本
  • PyCharm 或 VS Code 编辑器
  • Chrome 浏览器及其对应版本的 ChromeDriver
  • 相关 Python 库:selenium, webdriver-manager (可选)

安装依赖:

pip install selenium

1. 初始化浏览器对象

首先导入必要的模块并创建 WebDriver 实例。建议使用 webdriver-manager 自动管理驱动版本,减少配置麻烦。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import os

# 配置 Chrome 选项(可选:无头模式)
options = Options()
# options.add_argument('--headless') 
# options.add_argument('--disable-gpu')

# 注意:实际运行需确保 chromedriver 在 PATH 中或使用 webdriver-manager
try:
    driver = webdriver.Chrome(service=Service(), options=options)
except Exception as e:
    print(f"浏览器初始化失败:{e}")
    exit(1)

2. 页面导航与等待

打开淘宝首页并设置隐式等待,提高脚本稳定性。显式等待更适合处理动态元素加载。

driver.get('https://www.taobao.com/')
driver.maximize_window()
driver.implicitly_wait(10)  # 元素查找超时时间

3. 搜索商品与登录处理

3.1 输入关键字

通过 XPath 定位搜索框并输入关键词。建议先清空再输入以防残留字符。

def search_product():
    :
        search_box = driver.find_element(, )
        search_box.clear()
        search_box.send_keys(keyword)
     Exception  e:
        ()
keyword
try
"xpath"
'//*[@id="q"]'
except
as
print
f"搜索框定位失败:{e}"
3.2 点击搜索按钮

定位搜索按钮并执行点击操作。为避免被检测,加入随机休眠。

import time
import random

time.sleep(random.randint(1, 3))
search_btn = driver.find_element("xpath", '//*[@id="J_TSearchForm"]/div[1]/button')
search_btn.click()
3.3 登录验证

淘宝通常有验证码机制,完全自动化登录难度较大且易触发风控。建议采用'半自动化'方式:脚本运行后暂停,人工扫码登录,随后继续执行。

print("请在浏览器中完成登录验证...")
input("按回车键继续...")

4. 数据解析

登录成功后,进入搜索结果页。我们需要定位商品列表容器,并提取标题、价格、销量、店铺等信息。由于淘宝页面结构复杂,XPath 选择器可能需要根据实际页面调整。

def parse_data():
    items = driver.find_elements("xpath", '//div[@class="grid g-clearfix"]/div/div')
    results = []
    for item in items:
        try:
            title_elem = item.find_element("xpath", './/div[@class="row row-2 title"]/a')
            price_elem = item.find_element("xpath", './/strong')
            
            title = title_elem.text.strip()
            price = price_elem.text.replace('元', '')
            deal = item.find_element("xpath", './/div[@class="deal-cnt"]').text
            name = item.find_element("xpath", './/div[@class="shop"]/a/span[2]').text
            location = item.find_element("xpath", './/div[@class="location"]').text
            detail_url = item.find_element("xpath", './/div[@class="pic"]/a').get_attribute('href')
            
            results.append({
                'title': title,
                'price': price,
                'deal': deal,
                'name': name,
                'location': location,
                'url': detail_url
            })
        except Exception as e:
            print(f"解析单个商品失败:{e}")
            continue
    return results

5. 数据存储

将解析到的数据写入 CSV 文件。使用 csv 模块并指定编码为 utf-8-sig 以支持 Excel 打开。

import csv

def save_to_csv(data_list):
    filename = 'taobao_products.csv'
    with open(filename, mode='a', encoding='utf-8-sig', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=['title', 'price', 'deal', 'name', 'location', 'url'])
        if not os.path.exists(filename):
            writer.writeheader()
        writer.writerows(data_list)

6. 完整流程整合

将上述步骤整合到一个主函数中,并添加异常捕获机制,确保浏览器能正常关闭。

if __name__ == '__main__':
    try:
        driver = webdriver.Chrome()
        driver.get('https://www.taobao.com/')
        
        keyword = input("请输入搜索关键字:")
        search_product(keyword)
        
        input("请手动完成登录后按回车继续...")
        
        data = parse_data()
        save_to_csv(data)
        print(f"共抓取 {len(data)} 条数据")
        
    finally:
        driver.quit()

7. 注意事项与优化

  1. 反爬策略:淘宝有较严格的反爬机制,包括 IP 限制、验证码等。建议控制请求频率,使用代理 IP 池。
  2. 动态加载:部分数据可能通过 AJAX 加载,需要配合滚动页面触发加载。
  3. XPath 稳定性:淘宝页面结构经常更新,XPath 选择器可能需要调整。建议使用 CSS Selector 增加稳定性。
  4. 法律合规:请勿利用爬虫进行非法牟利或侵犯用户隐私。

8. 常见问题排查

  • ChromeDriver 版本不匹配:请确保 ChromeDriver 版本与 Chrome 浏览器版本一致。
  • 元素未找到:检查页面是否加载完成,尝试增加等待时间。
  • 中文乱码:保存文件时务必指定 encoding='utf-8-sig'。

结语

本文详细介绍了基于 Selenium 的淘宝数据抓取流程。通过合理配置和异常处理,可以构建相对稳定的采集脚本。在实际项目中,建议结合 Scrapy 框架或 API 接口以获得更好的扩展性。

目录

  1. Python 爬虫实战:使用 Selenium 自动化获取淘宝商品数据
  2. 前言
  3. 环境准备
  4. 1. 初始化浏览器对象
  5. 配置 Chrome 选项(可选:无头模式)
  6. options.add_argument('--headless')
  7. options.add_argument('--disable-gpu')
  8. 注意:实际运行需确保 chromedriver 在 PATH 中或使用 webdriver-manager
  9. 2. 页面导航与等待
  10. 3. 搜索商品与登录处理
  11. 3.1 输入关键字
  12. 3.2 点击搜索按钮
  13. 3.3 登录验证
  14. 4. 数据解析
  15. 5. 数据存储
  16. 6. 完整流程整合
  17. 7. 注意事项与优化
  18. 8. 常见问题排查
  19. 结语
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • YOLOv8 目标检测 PySide6 可视化 GUI 界面实现
  • 前端请求后端 404/405/500 状态码排查与解决实战
  • RISC-V 五级流水线 CPU 取指通路时序优化实战
  • 前端直连模型与完整 MCP 架构对比:大模型驱动地图原理实践
  • 前端开发基础:HTML、CSS、JavaScript 与 Vue 的关系
  • Python 开发者如何利用心理洞察突破 AI 需求预测局限
  • Python 换源完整指南:加速 PyPI 与 CPython 下载
  • 腾讯云服务器部署 OpenClaw 对接飞书实战指南
  • LeetCode 原地复写零:双指针 + 逆向填充实现 O(n) 时间 O(1) 空间
  • Apache IoTDB 跨「端 - 边 - 云」全场景部署与 DB+AI 实践
  • 2021 年信奥赛 C++ 提高组 CSP-S 初赛真题解析:阅读程序第 2 题
  • Java 静态代码块与构造代码块详解
  • GitHub Copilot 学生认证与使用指南
  • Cogito-v1-preview-llama-3B:128k 长文本中的跨段落逻辑矛盾检测
  • GitHub Copilot 提示词工程实战指南:从基础到精通
  • VSCode Copilot 接入智谱 GLM-4.6 实战指南
  • 使用 Python 实现微信自动回复功能
  • 全球老龄化背景下的护理机器人技术发展与挑战
  • Ollama 本地 CPU 部署开源大模型教程
  • Python 从入门到精通:核心语法、爬虫与深度学习实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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