一、为什么想爬天猫搜索页?
淘宝/天猫的商品信息丰富、结构清晰,是练习爬虫技术的“黄金练兵场”。
比如你可能想:
- 按关键词批量获取商品标题、价格、销量
- 做一个小型选品工具
- 学习如何绕过动态加载、登录、滑块等反爬机制
- 今天我们就从最基础的“关键词搜索”入手,带你一步步用 Selenium 实现。
二、技术路线:Selenium 模拟浏览器
天猫搜索页是 动态渲染 的,直接 requests.get 拿到的 HTML 里没有商品数据。
所以采用 Selenium + ChromeDriver 模拟真人操作:打开浏览器 → 输入关键词 → 回车 → 抓取结果。
三、准备工作
- 安装依赖
bash
pip install selenium
2.下载 ChromeDriverChromeDriver 官网版本必须与你本地 Chrome 一致!把 chromedriver.exe 放到系统 PATH 或代码同级目录即可。
四、完整代码(可直接跑)
Python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time, csv, os
def search_tmall(keyword, pages=2):
# 1. 启动浏览器
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(10)
# 2. 打开天猫首页
driver.get('https://www.tmall.com')
# 3. 定位搜索框 → 输入关键词 → 回车
search_box = driver.find_element(By.ID, 'mq')
search_box.send_keys(keyword)
search_box.send_keys(Keys.ENTER)
# 4. 准备保存数据
csv_file = f'tmall_{keyword}.csv'
with open(csv_file, 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['商品标题', '价格', '销量', '商品链接'])
# 5. 翻页抓取
for page in range(1, pages + 1):
print(f'正在抓取第 {page} 页...')
time.sleep(3) # 等待页面加载
# 6. 解析当前页商品列表
items = driver.find_elements(By.CSS_SELECTOR, '.product-iWrap')
for item in items:
try:
title = item.find_element(By.CSS_SELECTOR, '.productTitle a').text
price = item.find_element(By.CSS_SELECTOR, '.productPrice em').text.replace('¥', '')
sales = item.find_element(By.CSS_SELECTOR, '.productStatus span:first-child').text
link = item.find_element(By.CSS_SELECTOR, '.productTitle a').get_attribute('href')
writer.writerow([title, price, sales, link])
except Exception as e:
continue
# 7. 点击“下一页”
try:
next_btn = driver.find_element(By.CSS_SELECTOR, 'a.ui-page-next')
if 'disabled' in next_btn.get_attribute('class'):
break
next_btn.click()
except:
break
driver.quit()
print(f'已保存 {csv_file},共抓取 {pages} 页数据。')
if __name__ == '__main__':
keyword = input('请输入要搜索的关键词:')
search_tmall(keyword, pages=3)
五、运行效果
输入关键词“蓝牙耳机”,程序会自动打开浏览器,完成搜索并翻页,最终生成 tmall_蓝牙耳机.csv,包含:
商品标题 | 价格 | 销量 | 商品链接 |
---|---|---|---|
Sony WH-1000XM5 官方旗舰... | 2499 | 月销 3000+ | https://detail.tmall.com/... |
六、常见问题 & 小贴士
问题 | 解决思路 |
---|---|
被检测为爬虫 | 加 --disable-blink-features=AutomationControlled 或使用 undetected-chromedriver |
滑块/登录 | 手动扫码一次后保留 Cookie,下次复用 user-data-dir |
速度太慢 | 用显式等待 WebDriverWait 替代 time.sleep ,或抓接口(需逆向) |
想抓更多字段 | 点进详情页后继续用 Selenium 解析,或调用官方 API(需申请) |
七、进阶路线
- 接入淘宝开放平台官方 API(item_search_tmall)——合规又稳定
- 用 Scrapy + Redis 实现分布式抓取
- 上代理池、无头浏览器、验证码识别,打造“工业级”爬虫
- 把数据丢进 MongoDB → 用 Pandas 清洗 → 可视化分析,一条龙做选品报告
八、写在最后
爬虫技术再炫酷,也别忘了合法合规这条红线。
天猫有完善的反爬和风控策略,高频抓取可能导致 IP 被封、账号被限制。
建议个人学习时:
- 降低频率(sleep 随机 2~5 秒)
- 控制总页数(≤5 页)
- 不用于商业盈利
- 希望这篇小教程能帮你打开“动态网页抓取”的大门,祝你编码愉快!