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

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

随着互联网电商的发展,获取公开的商品数据对于市场分析具有重要意义。本文将演示如何利用 Python 的 Selenium 库模拟浏览器行为,自动访问淘宝并提取商品信息。请注意,本教程仅用于学习技术原理,实际应用中请严格遵守目标网站的 robots.txt 协议及相关法律法规,避免高频请求导致封禁或法律风险。
确保已安装以下组件:
安装依赖:
pip install selenium
首先导入必要的模块并创建 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)
打开淘宝首页并设置隐式等待,提高脚本稳定性。显式等待更适合处理动态元素加载。
driver.get('https://www.taobao.com/')
driver.maximize_window()
driver.implicitly_wait(10) # 元素查找超时时间
通过 XPath 定位搜索框并输入关键词。建议先清空再输入以防残留字符。
def search_product(keyword):
try:
search_box = driver.find_element("xpath", '//*[@id="q"]')
search_box.clear()
search_box.send_keys(keyword)
except Exception as e:
print(f"搜索框定位失败:{e}")
定位搜索按钮并执行点击操作。为避免被检测,加入随机休眠。
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()
淘宝通常有验证码机制,完全自动化登录难度较大且易触发风控。建议采用'半自动化'方式:脚本运行后暂停,人工扫码登录,随后继续执行。
print("请在浏览器中完成登录验证...")
input("按回车键继续...")
登录成功后,进入搜索结果页。我们需要定位商品列表容器,并提取标题、价格、销量、店铺等信息。由于淘宝页面结构复杂,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
将解析到的数据写入 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)
将上述步骤整合到一个主函数中,并添加异常捕获机制,确保浏览器能正常关闭。
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()
encoding='utf-8-sig'。本文详细介绍了基于 Selenium 的淘宝数据抓取流程。通过合理配置和异常处理,可以构建相对稳定的采集脚本。在实际项目中,建议结合 Scrapy 框架或 API 接口以获得更好的扩展性。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 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