以下將詳細解釋如何通過這兩個庫來實現按關鍵字搜索并解析淘寶商品信息。
一、準備工作
1. 安裝必要的庫
在開始之前,確保已經安裝了 requests
和 BeautifulSoup
庫。如果尚未安裝,可以通過以下命令進行安裝:
bash
pip install requests
pip install beautifulsoup4
2. 了解目標網頁的結構
在編寫爬蟲代碼之前,需要先了解淘寶搜索結果頁面的 HTML 結構。可以通過瀏覽器的開發者工具(按 F12 打開)來查看頁面的 HTML 源碼。
例如,當你在淘寶搜索框中輸入關鍵字并點擊搜索后,頁面會加載出一系列商品信息。這些商品信息通常被包裹在某些特定的 HTML 標簽和類名中。
二、編寫爬蟲代碼
以下是使用 requests
和 BeautifulSoup
解析淘寶商品信息的詳細步驟和代碼示例。
1. 發起請求
使用 requests
庫向淘寶搜索頁面發起請求,并獲取頁面的 HTML 內容。
Python
import requestsdef get_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textelse:print(f"請求失敗,狀態碼:{response.status_code}")return None
2. 解析 HTML
使用 BeautifulSoup
解析獲取到的 HTML 內容,并提取商品信息。
Python
from bs4 import BeautifulSoupdef parse_product_details(html):soup = BeautifulSoup(html, 'html.parser')# 淘寶商品信息通常被包裹在 <div class="m-itemlist"> 中products = soup.select(".m-itemlist .items .item")for product in products:try:# 提取商品名稱title = product.select_one(".title").get_text(strip=True)# 提取商品價格price = product.select_one(".price").get_text(strip=True)# 提取店鋪名稱shop = product.select_one(".shop").get_text(strip=True)# 提取商品鏈接link = product.select_one("a").get('href')print(f"商品名稱: {title}")print(f"商品價格: {price}")print(f"店鋪名稱: {shop}")print(f"商品鏈接: https:{link}")print("------------------------")except Exception as e:print(f"解析錯誤:{e}")
3. 搜索商品
將上述兩個函數組合起來,實現按關鍵字搜索并解析商品信息的功能。
Python
def search_products(keyword):# 構造搜索 URLurl = f"https://s.taobao.com/search?q={keyword}"html = get_page(url)if html:parse_product_details(html)if __name__ == "__main__":keyword = input("請輸入搜索關鍵字:")search_products(keyword)
三、代碼解釋
1.?get_page
?函數
-
使用
requests.get()
方法向目標 URL 發起請求。 -
設置了
User-Agent
和其他請求頭,以模擬瀏覽器行為,避免被淘寶識別為爬蟲。 -
檢查響應的狀態碼,確保請求成功。
2.?parse_product_details
?函數
-
使用
BeautifulSoup
解析 HTML 內容。 -
使用
soup.select()
方法選擇頁面中的商品列表。這里假設商品信息被包裹在<div class="m-itemlist">
中。 -
遍歷每個商品項,提取商品名稱、價格、店鋪名稱和鏈接等信息。
-
使用
get_text(strip=True)
方法獲取文本內容,并去除多余的空白字符。 -
使用
get('href')
方法獲取商品鏈接。
3.?search_products
?函數
-
構造搜索 URL,將關鍵字拼接到 URL 中。
-
調用
get_page
函數獲取頁面 HTML。 -
調用
parse_product_details
函數解析商品信息。
四、注意事項
-
反爬機制:
-
淘寶可能會對爬蟲進行限制,例如限制 IP 訪問頻率、檢測異常請求等。如果遇到這種情況,可以嘗試以下方法:
-
使用代理服務器(如代理 IP 池)。
-
增加請求間隔時間(使用
time.sleep()
)。 -
模擬更多瀏覽器行為(如設置更多請求頭)。
-
-
-
動態加載內容:
-
淘寶的部分內容可能是通過 JavaScript 動態加載的。如果發現
requests
獲取到的 HTML 內容中缺少某些數據,可以考慮使用selenium
來模擬瀏覽器操作。
-
-
數據存儲:
-
如果需要將爬取到的數據存儲起來,可以將其保存到文件(如 CSV、JSON)或數據庫中。
-
五、示例輸出
假設搜索關鍵字為 "iPhone 13"
,運行程序后可能輸出如下:
請輸入搜索關鍵字:iPhone 13
商品名稱: iPhone 13
商品價格: ¥5499.00
店鋪名稱: 蘋果官方旗艦店
商品鏈接: https://detail.tmall.com/item.htm?id=1234567890
------------------------
商品名稱: iPhone 13 Pro
商品價格: ¥7999.00
店鋪名稱: 蘋果官方旗艦店
商品鏈接: https://detail.tmall.com/item.htm?id=9876543210
------------------------
...
通過上述步驟和代碼,你可以使用 requests
和 BeautifulSoup
實現按關鍵字搜索并解析淘寶商品信息的功能。希望這個示例對你有所幫助!