利用爬蟲和 Luckdata API 獲取 Footlocker.kr 數據的全流程解析

在球鞋數據採集領域,獲取商品資訊、庫存狀態和價格等數據是十分關鍵的。本文將介紹兩種常見的數據獲取方法:

  1. 傳統爬蟲方法,通過 Python 的 requests 和 BeautifulSoup 實現網頁抓取。

  2. 利用 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 BeautifulSoup

soup = 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 pd

df = 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 json

product_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 requests

import 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。

  • 在實際應用中,兩者可結合使用,確保數據完整性。