Python 爬虫实战:使用 Selenium 自动化获取淘宝商品数据
前言
随着互联网时代的到来,人们更加倾向于通过互联网进行购物。淘宝作为电商行业的巨头平台,积累了海量的公开商家与商品信息。对于数据分析、市场调研或学习网络爬虫技术而言,获取这些公开数据是一个经典的实践案例。
本文介绍了使用 Python 和 Selenium 库自动化操作浏览器以抓取淘宝公开商品数据的流程。内容涵盖环境搭建、浏览器初始化、关键字搜索、登录处理、数据解析及 CSV 保存。通过 XPath 定位页面元素,实现了商品标题、价格、销量、店铺信息及链接的提取。文章同时强调了网络爬虫的合规性,建议仅用于学习研究,避免高频请求对目标网站造成压力。

随着互联网时代的到来,人们更加倾向于通过互联网进行购物。淘宝作为电商行业的巨头平台,积累了海量的公开商家与商品信息。对于数据分析、市场调研或学习网络爬虫技术而言,获取这些公开数据是一个经典的实践案例。
本文将详细介绍如何使用 Python 结合 Selenium 自动化工具,模拟浏览器行为来获取淘宝上的公开商品数据。Selenium 能够控制真实浏览器,处理 JavaScript 渲染的页面,非常适合应对现代动态网站。
在开始之前,请确保您的开发环境满足以下要求:
selenium: 用于浏览器自动化控制csv: Python 内置模块,用于保存数据time & random: 内置模块,用于控制执行节奏,降低被反爬检测的风险注意:网络爬虫应遵守目标网站的
robots.txt协议及相关法律法规,仅用于学习研究,请勿用于非法用途或高频攻击。
首先,我们需要初始化一个 WebDriver 实例来控制浏览器。这里我们选择 Chrome 浏览器。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 配置浏览器选项(可选,例如无头模式)
options = Options()
options.add_argument('--headless') # 后台运行,不显示界面
options.add_argument('--disable-gpu')
# 初始化驱动
driver = webdriver.Chrome(options=options)
初始化完成后,我们可以控制浏览器访问目标网址、调整窗口大小以及设置等待策略。
# 访问淘宝首页
driver.get('https://www.taobao.com/')
# 最大化浏览器窗口
driver.maximize_window()
# 设置隐式等待,元素加载超时前会一直尝试查找
driver.implicitly_wait(10)
此时运行代码,您应该能看到浏览器自动打开并进入淘宝首页。
为了获取特定商品的数据,我们需要模拟用户在搜索框输入关键词并点击搜索按钮的操作。由于淘宝页面结构复杂且经常更新,定位元素推荐使用 XPath 语法。
def search_product(keyword):
# 定位搜索输入框
search_box = driver.find_element(By.XPATH, '//*[@id="q"]')
search_box.clear() # 清空原有内容
search_box.send_keys(keyword)
为了避免触发验证码或被识别为机器,建议在操作之间加入随机延迟。
import time
import random
from selenium.webdriver.common.by import By
# 随机休眠 1 到 3 秒,模拟人类操作
for _ in range(random.randint(1, 3)):
time.sleep(1)
# 定位搜索按钮并点击
search_btn = driver.find_element(By.XPATH, '//*[@id="J_TSearchForm"]/div[1]/button')
search_btn.click()
淘宝对未登录用户的访问有严格限制,通常无法直接看到完整价格或销量信息。在实际操作中,建议采用以下方式之一:
本文示例暂以已登录状态下的页面解析为主,实际使用时请确保账号处于登录状态。
当搜索结果页加载完毕后,我们需要提取关键信息,包括标题、价格、销量、店铺名称、地址和详情页链接。
# 获取所有商品卡片 div 标签
# 注意:XPath 路径可能随页面改版而变化,需根据实际情况调整
divs = driver.find_elements(By.XPATH, '//div[@class="grid g-clearfix"]/div/div')
data_list = []
for div in divs:
try:
# 提取标题
title = div.find_element(By.XPATH, './/div[@class="row row-2 title"]/a').text
# 提取价格
price_elem = div.find_element(By.XPATH, './/strong')
price = price_elem.text + '元'
# 提取销量
deal = div.find_element(By.XPATH, './/div[@class="deal-cnt"]').text
# 提取店铺名称
name = div.find_element(By.XPATH, './/div[@class="shop"]/a/span[2]').text
# 提取店铺地址
location = div.find_element(By.XPATH, './/div[@class="location"]').text
# 提取详情页链接
detail_url = div.find_element(By.XPATH, './/div[@class="pic"]/a').get_attribute('href')
item_data = {
'title': title,
'price': price,
'deal': deal,
'name': name,
'location': location,
'detail_url': detail_url
}
data_list.append(item_data)
print(f"获取成功:{title}")
except Exception as e:
print(f"解析失败:{e}")
continue
将抓取到的数据存储为 CSV 文件是常见的做法,便于后续分析。
import csv
if not data_list:
print("没有获取到数据")
else:
with open('taobao_products.csv', mode='w', encoding='utf-8-sig', newline='') as f:
writer = csv.DictWriter(f, fieldnames=data_list[0].keys())
writer.writeheader()
writer.writerows(data_list)
print(f"数据已保存至 taobao_products.csv,共 {len(data_list)} 条记录")
本文演示了基于 Selenium 的淘宝商品数据采集流程。通过掌握浏览器自动化技术,您可以更灵活地应对各种动态网页。希望这个案例能帮助您入门 Python 爬虫开发,但在实际应用中,请务必遵守法律法规,尊重网站版权与隐私政策。

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