利用爬蟲和 Luckdata API 獲取 Footlocker.kr 數據的全流程解析
在球鞋數據採集領域,獲取商品資訊、庫存狀態和價格等數據是十分關鍵的。本文將介紹兩種常見的數據獲取方法:
傳統爬蟲方法,通過 Python 的 requests 和 BeautifulSoup 實現網頁抓取。
利用 Luckdata Sneaker API,快速獲取結構化數據。
通過對比與結合這兩種方法,我們可以選擇最合適的方式或將它們整合,用於後續數據處理和分析。
1. 分析需求和目標網站
在抓取數據之前,首先需要了解目標網站 footlocker.kr 的結構,以及數據所在的位置。通常可以通過瀏覽器的開發者工具(F12)查看 HTML 結構,確認商品名稱、價格、庫存資訊等數據存放的標籤和 class。
由於有些頁面使用 JavaScript 動態加載內容,直接使用 requests 可能無法獲取完整數據。幸運的是,Luckdata Sneaker API 提供了一個統一接口,可以直接返回結構化 JSON 數據,而無需我們解析 HTML。
2. 方法一:傳統爬蟲技術獲取數據
2.1 使用 requests 獲取頁面內容
以下代碼演示如何設置請求頭並使用 requests 獲取頁面 HTML 原始碼:
import requests# 定義請求頭,偽裝為瀏覽器
headers = {
"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"
}
url = "https://www.footlocker.kr/ko/"
response = requests.get(url, headers=headers)
if response.status_code == 200:
print("請求成功!預覽部分原始碼:")
print(response.text[:500]) # 預覽前500字元
else:
print(f"請求失敗,狀態碼: {response.status_code}")
注意:如果頁面內容由 JavaScript 渲染,則此方法獲取的數據可能不完整。
2.2 使用 BeautifulSoup 解析 HTML 數據
若數據為靜態內容,則可以借助 BeautifulSoup 來提取數據。假設我們希望獲取頁面中包含商品名稱的元素:
from bs4 import BeautifulSoupsoup = BeautifulSoup(response.text, "html.parser")
# 這裡假設商品名稱存放在 class 為 'ProductCard-name' 的 div 中
product_elements = soup.find_all("div", class_="ProductCard-name")
product_names = [product.get_text(strip=True) for product in product_elements]
print("商品名稱列表:")
for name in product_names:
print(name)
在實際開發中,你需要根據網頁實際 HTML 結構調整選擇器。
2.3 數據存儲示例
抓取的數據可以進一步存儲為 CSV 或 JSON 文件,方便後續分析和處理。
import pandas as pd# 去重後存儲數據
product_names = list(set(product_names))
df = pd.DataFrame({"商品名稱": product_names})
df.to_csv("footlocker_products.csv", index=False, encoding="utf-8")
3. 方法二:利用 Luckdata Sneaker API 獲取數據
Luckdata Sneaker API 是一個整合多個球鞋網站接口的工具,能夠通過統一接口獲取包括 footlocker.kr 在內的多個平臺的商品資訊。它能夠直接返回結構化 JSON 數據,極大簡化了爬蟲中 HTML 解析的繁瑣步驟。
3.1 API 請求示例
首先,你需要申請 Luckdata API Key,然後使用如下代碼發送請求。完整的 URL 為:
https://luckdata.io/api/sneaker-API/get_aa0x?url=https://www.footlocker.kr/ko/product/~/316161353004.html
示例代碼如下:
import requests# 設置你的 Luckdata API Key
luckdata_api_key = "your_luckdata_key"
headers = {
"X-Luckdata-Api-Key": luckdata_api_key
}
# 目標商品的 URL
product_url = "https://www.footlocker.kr/ko/product/~/316161353004.html"
# 構造 API 請求 URL
api_url = f"https://luckdata.io/api/sneaker-API/get_aa0x?url={product_url}"
# 發送請求
response = requests.get(api_url, headers=headers)
# 檢查請求狀態,並打印返回數據
if response.status_code == 200:
data = response.json()
print("Luckdata API 返回的數據:")
print(data)
else:
print(f"請求失敗,狀態碼: {response.status_code}, 回應: {response.text}")
3.2 解析 Luckdata API 返回的數據
假設 API 返回的數據中包含字段 name(商品名稱)、price(價格)、stock_status(庫存狀態)、image(圖片 URL)等,我們可以通過以下代碼提取關鍵字段:
if response.status_code == 200:data = response.json()
product_name = data.get("name", "未知商品")
price = data.get("price", "未知價格")
stock_status = data.get("stock_status", "庫存狀態未知")
image_url = data.get("image", "無圖片")
brand = data.get("brand", "未知品牌")
category = data.get("category", "未知類別")
print(f"商品名稱: {product_name}")
print(f"品牌: {brand}")
print(f"類別: {category}")
print(f"價格: {price}")
print(f"庫存狀態: {stock_status}")
print(f"圖片鏈接: {image_url}")
3.3 數據存儲示例
存儲為 CSV
import pandas as pddf = pd.DataFrame([{
"商品名稱": product_name,
"品牌": brand,
"類別": category,
"價格": price,
"庫存狀態": stock_status,
"圖片鏈接": image_url
}])
df.to_csv("footlocker_product_api.csv", index=False, encoding="utf-8")
存儲為 JSON
import jsonproduct_data = {
"商品名稱": product_name,
"品牌": brand,
"類別": category,
"價格": price,
"庫存狀態": stock_status,
"圖片鏈接": image_url
}
with open("footlocker_product_api.json", "w", encoding="utf-8") as f:
json.dump(product_data, f, ensure_ascii=False, indent=4)
4. 綜合應用:批量獲取和數據整合
對於需要批量獲取多個商品資訊的場景,可以先構建一個商品 URL 列表,然後循環調用 Luckdata API 獲取數據,最終存儲到一個 CSV 文件中。
import requestsimport pandas as pd
luckdata_api_key = "your_luckdata_key"
headers = {"X-Luckdata-Api-Key": luckdata_api_key}
# 商品 URL 列表
product_urls = [
"https://www.footlocker.kr/ko/product/~/316161353004.html",
"https://www.footlocker.kr/ko/product/~/316161353005.html"
]
all_products = []
for product_url in product_urls:
api_url = f"https://luckdata.io/api/sneaker-API/get_aa0x?url={product_url}"
response = requests.get(api_url, headers=headers)
if response.status_code == 200:
data = response.json()
product_name = data.get("name", "未知商品")
price = data.get("price", "未知價格")
stock_status = data.get("stock_status", "庫存狀態未知")
image_url = data.get("image", "無圖片")
brand = data.get("brand", "未知品牌")
category = data.get("category", "未知類別")
all_products.append({
"商品名稱": product_name,
"品牌": brand,
"類別": category,
"價格": price,
"庫存狀態": stock_status,
"圖片鏈接": image_url
})
else:
print(f"請求失敗: {product_url}")
# 將數據保存到 CSV 文件
df = pd.DataFrame(all_products)
df.to_csv("footlocker_bulk_products.csv", index=False, encoding="utf-8")
print("批量數據保存成功!")
5. 總結與建議
通過上面的示例代碼,我們可以看到:
傳統爬蟲方法:雖然能夠直接獲取網頁 HTML,但需要應對 JavaScript 渲染和反爬機制,且代碼容易受到目標網站結構變化的影響。
Luckdata Sneaker API:直接返回結構化數據,省去了 HTML 解析的複雜步驟,對於批量數據獲取和即時更新具有明顯優勢,但需要根據使用量選擇合適的訂閱方案。
建議:
若數據需求較簡單且頁面為靜態展示,可以考慮傳統爬蟲技術;
若希望獲取更全面且結構化的數據,則推薦使用 Luckdata API。
在實際應用中,兩者可結合使用,確保數據完整性。