在电商数据分析、竞品调研、价格监控等场景中,批量获取淘宝搜索结果页数据是高频刚需。淘宝采用JS 动态渲染 + 强反爬机制,直接用 requests 请求无法获取完整数据,本文基于 Python+Selenium 实现稳定、可落地的批量爬取方案,覆盖搜索、翻页、数据提取、存储全流程。
一、实战目标与技术选型
1. 爬取目标
批量抓取淘宝搜索结果页商品标题、价格、销量、店铺名、商品链接,支持多关键词、多页码自动爬取,数据导出为 CSV 用于分析。
2. 技术栈
- Selenium:模拟浏览器操作,解决 JS 渲染页面抓取问题
- BeautifulSoup:解析页面结构,提取商品数据
- pandas:数据整理与 CSV 存储
- ChromeDriver:Chrome 浏览器驱动,匹配本地 Chrome 版本
二、环境准备
1. 安装依赖库
bash
运行
pip install selenium beautifulsoup4 pandas
2. 配置 ChromeDriver
3. 浏览器优化配置(反爬必备)
python
运行
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 配置Chrome选项
chrome_options = Options()
# 无界面模式(可选,正式爬取开启)
# chrome_options.add_argument('–headless')
chrome_options.add_argument('–disable-gpu')
chrome_options.add_argument('–no-sandbox')
# 禁用图片加载,提升速度
chrome_options.add_argument('blink-settings=imagesEnabled=false')
# 添加用户代理,模拟真实用户
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')
# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)
三、核心爬取逻辑
1. 淘宝搜索页访问
构造搜索 URL,自动输入关键词并搜索:
python
运行
def search_taobao(keyword):
"""淘宝搜索函数"""
url = f'https://s.taobao.com/search?q={keyword}'
driver.get(url)
# 等待页面加载
driver.implicitly_wait(10)
print(f"正在搜索:{keyword}")
2. 单页数据提取
解析页面 HTML,提取商品核心字段:
python
运行
from bs4 import BeautifulSoup
import pandas as pd
def parse_page():
"""解析单页商品数据"""
soup = BeautifulSoup(driver.page_source, 'html.parser')
items = []
# 定位商品列表(淘宝搜索页商品节点)
goods_list = soup.select('.item.J_MouserOnverReq')
for good in goods_list:
try:
# 商品标题
title = good.select_one('.title').get_text(strip=True)
# 商品价格
price = good.select_one('.price').get_text(strip=True)
# 销量
sales = good.select_one('.deal-cnt').get_text(strip=True)
# 店铺名
shop = good.select_one('.shop').get_text(strip=True)
# 商品链接
link = good.select_one('.J_ClickStat')['href']
if not link.startswith('http'):
link = 'https:' + link
items.append({
'标题': title,
'价格': price,
'销量': sales,
'店铺': shop,
'链接': link
})
except:
continue
return items
3. 自动翻页爬取
支持指定页码批量抓取,避免频繁请求触发反爬:
python
运行
import time
def crawl_by_page(keyword, max_page=3):
"""批量翻页爬取"""
all_items = []
search_taobao(keyword)
for page in range(1, max_page+1):
print(f"正在爬取第{page}页")
# 解析当前页
items = parse_page()
all_items.extend(items)
print(f"第{page}页抓取到{len(items)}条数据")
# 翻页操作
try:
# 点击下一页按钮
next_btn = driver.find_element_by_css_selector('.J_Ajax.next')
next_btn.click()
# 延时等待,防止被封
time.sleep(3)
except:
print("已到最后一页")
break
return all_items
4. 数据存储
将爬取数据保存为 CSV 文件,方便后续分析:
python
运行
def save_data(items, keyword):
"""保存数据到CSV"""
df = pd.DataFrame(items)
filename = f'淘宝_{keyword}_商品数据.csv'
df.to_csv(filename, index=False, encoding='utf-8-sig')
print(f"数据已保存至:{filename}")
四、完整运行代码
python
运行
# 主函数
if __name__ == '__main__':
# 配置参数
KEYWORD = '笔记本电脑' # 搜索关键词
MAX_PAGE = 3 # 爬取页数
# 启动爬取
data = crawl_by_page(KEYWORD, MAX_PAGE)
# 保存数据
save_data(data, KEYWORD)
# 关闭浏览器
driver.quit()
print("爬取完成!")
五、反爬应对策略(关键)
淘宝反爬机制严格,以下策略能大幅提升爬取稳定性:
六、扩展优化方向
七、合规声明
本教程仅用于学习爬虫技术,爬取前请遵守《淘宝 robots 协议》及相关法律法规,禁止用于商业用途、恶意爬取、数据倒卖等行为,合规使用爬虫技术。


