一、為什么想爬天貓搜索頁?
淘寶/天貓的商品信息豐富、結(jié)構(gòu)清晰,是練習(xí)爬蟲技術(shù)的“黃金練兵場”。
比如你可能想:
- 按關(guān)鍵詞批量獲取商品標(biāo)題、價格、銷量
- 做一個小型選品工具
- 學(xué)習(xí)如何繞過動態(tài)加載、登錄、滑塊等反爬機(jī)制
- 今天我們就從最基礎(chǔ)的“關(guān)鍵詞搜索”入手,帶你一步步用 Selenium 實(shí)現(xiàn)。
二、技術(shù)路線:Selenium 模擬瀏覽器
天貓搜索頁是 動態(tài)渲染 的,直接 requests.get 拿到的 HTML 里沒有商品數(shù)據(jù)。
所以采用 Selenium + ChromeDriver 模擬真人操作:打開瀏覽器 → 輸入關(guān)鍵詞 → 回車 → 抓取結(jié)果。
三、準(zhǔn)備工作
- 安裝依賴
bash
pip install selenium
2.下載 ChromeDriverChromeDriver 官網(wǎng)版本必須與你本地 Chrome 一致!把 chromedriver.exe 放到系統(tǒng) 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. 定位搜索框 → 輸入關(guān)鍵詞 → 回車
search_box = driver.find_element(By.ID, 'mq')
search_box.send_keys(keyword)
search_box.send_keys(Keys.ENTER)
# 4. 準(zhǔn)備保存數(shù)據(jù)
csv_file = f'tmall_{keyword}.csv'
with open(csv_file, 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['商品標(biāo)題', '價格', '銷量', '商品鏈接'])
# 5. 翻頁抓取
for page in range(1, pages + 1):
print(f'正在抓取第 {page} 頁...')
time.sleep(3) # 等待頁面加載
# 6. 解析當(dāng)前頁商品列表
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. 點(diǎn)擊“下一頁”
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} 頁數(shù)據(jù)。')
if __name__ == '__main__':
keyword = input('請輸入要搜索的關(guān)鍵詞:')
search_tmall(keyword, pages=3)
五、運(yùn)行效果
輸入關(guān)鍵詞“藍(lán)牙耳機(jī)”,程序會自動打開瀏覽器,完成搜索并翻頁,最終生成 tmall_藍(lán)牙耳機(jī).csv,包含:
商品標(biāo)題 | 價格 | 銷量 | 商品鏈接 |
---|---|---|---|
Sony WH-1000XM5 官方旗艦... | 2499 | 月銷 3000+ | https://detail.tmall.com/... |
六、常見問題 & 小貼士
問題 | 解決思路 |
---|---|
被檢測為爬蟲 | 加 --disable-blink-features=AutomationControlled 或使用 undetected-chromedriver |
滑塊/登錄 | 手動掃碼一次后保留 Cookie,下次復(fù)用 user-data-dir |
速度太慢 | 用顯式等待 WebDriverWait 替代 time.sleep ,或抓接口(需逆向) |
想抓更多字段 | 點(diǎn)進(jìn)詳情頁后繼續(xù)用 Selenium 解析,或調(diào)用官方 API(需申請) |
七、進(jìn)階路線
- 接入淘寶開放平臺官方 API(item_search_tmall)——合規(guī)又穩(wěn)定
- 用 Scrapy + Redis 實(shí)現(xiàn)分布式抓取
- 上代理池、無頭瀏覽器、驗(yàn)證碼識別,打造“工業(yè)級”爬蟲
- 把數(shù)據(jù)丟進(jìn) MongoDB → 用 Pandas 清洗 → 可視化分析,一條龍做選品報告
八、寫在最后
爬蟲技術(shù)再炫酷,也別忘了合法合規(guī)這條紅線。
天貓有完善的反爬和風(fēng)控策略,高頻抓取可能導(dǎo)致 IP 被封、賬號被限制。
建議個人學(xué)習(xí)時:
- 降低頻率(sleep 隨機(jī) 2~5 秒)
- 控制總頁數(shù)(≤5 頁)
- 不用于商業(yè)盈利
- 希望這篇小教程能幫你打開“動態(tài)網(wǎng)頁抓取”的大門,祝你編碼愉快!