家人們!黑五又要來了,作為全球最大的電商購物狂歡節,Amazon上的商品數據變化可謂是瞬息萬變,尤其是像iPhone17這種熱門新品,價格波動、庫存情況、用户評價等數據,都是跨境電商賣家和數據分析師的“香餑餑”。但你懂的,直接用本地IP去 scrape 亞馬遜,準保被Amazon的網站機制懟一臉:剛抓了幾個SKU,IP就被Ban了、驗證碼狂跳、數據刷不出來……
今天哥們兒就來手把手教你,如何用海外代理IP採集Amazon上iPhone17的售賣數據,順帶帶你看看怎麼分析這堆數據,看完你就能上手擼代碼了!
一、為什麼採集Amazon數據,非得用海外代理IP?
先説結論:
Amazon.com 對中國大陸 IP 並不友好。
大家都知道,Amazon作為全球電商巨頭,用户流量巨大,網站的機制也是超級嚴密。如果你想用本地IP去硬剛Amazon的風控系統,那我敬你是條漢子,這分分鐘就被識別為“異常流量”,直接封IP或者彈出驗證碼。更別提黑五期間,服務器負載高,針對這部分的訪問限制會更嚴。
為啥呢?原因很簡單:
- 你用的是本地IP;
- 你的訪問都來自相同的IP地址,網站已經識別到“是bot在搞事”。
這一點,海外代理IP就是破局的關鍵了!海外代理IP可以讓你的請求來自不同的IP,而不是盯着一個IP死薅數據。而且高質量的代理更不會輕易掉鏈子,能保證請求的穩定性、防止運行中斷,能高效幫助你完成數據採集任務。
從這裏獲取海外代理 IP:
import requests
API_URL = "https://overseas.proxy.qg.net/get?key=yourkey&num=1&area=&isp=&format=txt&seq=\r\n&distinct=false"
def get_proxy():
ip = requests.get(API_URL, timeout=10).text.strip()
return {
"http": ip,
"https": ip
}
ok,接下來還是圍繞我們今天的主題,如何用海外代理爬亞馬遜iPhone17的數據。
二、實戰操作
2.1 配置環境
在開始爬蟲之前,我們需要以下工具和環境:
- Python 編程環境:Python 3,
- 搭配基礎包:requests 和 lxml。
pip install requests lxml
2.2 扒頁面結構,明確目標數據
先把目標説清楚,避免很多人一上來就亂抓。
採集的數據字段包括:
- 商品標題
- 商品鏈接
- 當前售價
- 評論
- 評論數量
我們以這個搜索 URL 為例(示意):
https://www.amazon.com/s?k=iPhone+17
想把這類頁面上的商品售賣信息抓下來,我們需要做以下幾個步驟: - 打開目標頁面,找到商品列表區域。F12 看 DOM,打開後按F5刷新一下:
所有商品列表,都在一個統一的大容器中
<div class="s-main-slot s-result-list s-search-results sg-row">
這個 div,就是整個搜索結果頁的主容器。
XPath 示例:
//div[contains(@class,"s-main-slot")]
單個商品的父級容器
在主容器下,每一個商品,都是一個 div:
<div data-component-type="s-search-result"
class="sg-col-inner">
也就是説:
每一個 data-component-type="s-search-result",就是一個商品卡片
XPath 示例(非常關鍵):
//div[@data-component-type="s-search-result"]
後面所有字段,都是從這個節點往下找。
如商品價格價格在 <span class="a-price"> 內,分整數字和分數部分。整數字在 <span class="a-price-whole">,分數在 <span class="a-price-fraction">,符號在$。
- 類名:a-price(主容器),a-price-whole,a-price-fraction。
- XPath 示例:.//span[@class="a-price-whole"]/text() 和 .//span[@class="a-price-fraction"]/text()(組合成完整價格,如 "1,499.00")。
- 特性:如果有折扣,原價在 <span class="a-price a-text-price"> 或 <span class="a-offscreen">(屏幕外,供無障礙閲讀)。黑五期間常有額外折扣類如 a-text-price。
<span class="a-price" data-a-size="xl" data-a-color="base">
<span class="a-offscreen">$1,499.00</span>
<span aria-hidden="true">
<span class="a-price-symbol">$</span>
<span class="a-price-whole">1,499</span>
<span class="a-price-decimal">.</span>
<span class="a-price-fraction">00</span>
</span>
</span>
其他以此類推,不贅述啦。
我們可以得出:一般每一個商品信息會用一個標籤包裹起來,主要包含以下內容:
- 商品標題:存放在 <h2> 標籤內的 <span> 中;
- 商品價格:在 a-price 類的 <span> 標籤中;
- 商品鏈接:位於 標籤的 href 屬性;
-
詳細信息:如評分、評論數,會分散在 a-icon-alt 和 a-size-small 類的標籤中。
這時候我們就可以確定爬取數據的路徑了。2.3 核心代碼實現
我們把功能解耦合,分為:中間件配置(代理)、請求發送、數據清洗。
2.3.1 中間件配置
要實現IP輪詢,我們需要調用青果網絡的API接口獲取實時IP。
敲黑板!這裏的API是核心配置:
import requests
from lxml import etree
import time
import random
# 功能:通過 API 獲取青果網絡海外代理 IP
# 這就是我們的“外掛”接口
def get_proxy_middleware():
# 青果網絡提取鏈接,此處替換為你自己的 key
api_url = "https://overseas.proxy.qg.net/get?key=yourkey&num=1&area=&isp=&format=txt&seq=\r\n&distinct=false"
try:
response = requests.get(api_url, timeout=5)
if response.status_code == 200:
ip_port = response.text.strip()
# 構造 Requests 庫需要的 proxies 字典
return {
"http": f"http://{ip_port}",
"https": f"http://{ip_port}"
}
except Exception as e:
print(f"代理獲取異常,請檢查網絡連通性: {e}")
return None
# 偽裝 Header,防止被反爬策略識別
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
2.3.2 業務邏輯層
利用requests掛載代理,通過lxml進行數據提取。這裏我們要加一點容錯機制,保證代碼的健壯性。
def run_spider(keyword):
target_url = f"https://www.amazon.com/s?k={keyword}"
# 獲取代理 IP
proxy = get_proxy_middleware()
if not proxy:
print("代理池枯竭,任務終止")
return
print(f"正在進行全量抓取,當前節點: {proxy},關鍵詞: {keyword}")
try:
# 發起 HTTP 請求
resp = requests.get(target_url, headers=headers, proxies=proxy, timeout=10)
# 簡單校驗一下狀態碼
if resp.status_code == 200:
# 避免被亞馬遜的風控識別為 robot
if "Robot Check" in resp.text:
print("觸發驗證碼風控,建議切換IP重試")
return
parse_html(resp.text)
else:
print(f"請求失敗,狀態碼: {resp.status_code}")
except Exception as e:
print(f"發生未知錯誤: {e}")
def parse_html(html_str):
tree = etree.HTML(html_str)
# 獲取所有商品卡片節點
items = tree.xpath('//div[@data-component-type="s-search-result"]')
data_list = []
for item in items:
try:
# 數據清洗與提取
title = item.xpath('.//h2//span/text()')
# 三元表達式處理空值,防止 Index Out of Bounds
title_str = title[0] if title else "無標題數據"
price = item.xpath('.//span[@class="a-price"]//span[@class="a-offscreen"]/text()')
price_str = price[0] if price else "暫無報價"
link = item.xpath('.//h2//a/@href')
link_str = "https://www.amazon.com" + link[0] if link else ""
# 結構化數據
sku_data = {
"Title": title_str,
"Price": price_str,
"Url": link_str
}
data_list.append(sku_data)
print(sku_data) # 控制枱輸出,實時監控抓取進度
except Exception as e:
continue
return data_list
青果網絡提供的海外代理IP對於高併發還行:
2.3.3 啓動入口
if __name__ == "__main__":
# 假設 iPhone 17 已經預售或我們要抓取相關周邊
search_key = "iPhone 17"
run_spider(search_key)
2.3.4 存數據!
import csv
# ... 前面爬取和解析得到 product_list ...
# 存成CSV文件
filename = "amazon_iphone17_blackfriday.csv"
with open(filename, 'w', newline='', encoding='utf-8-sig') as csvfile: # utf-8-sig 防止中文亂碼
fieldnames = ['title', 'price', 'link', 'rating', 'reviews'] # 定義列名
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader() # 寫入標題行
for prop in product_list:
writer.writerow(prop) # 寫入一行數據
print(f"【數據已保存】: 共 {len(product_list)} 條記錄到 {filename}")
更高級點存數據庫(比如SQLite)適合數據量大或者需要複雜查詢的情況,稍微麻煩點,但更規範。
三、數據分析
數據採集完了,我們可以用Python簡單分析一下這些數據,比如用Pandas計算平均價格、最高評分等。
import pandas as pd
df = pd.read_csv("amazon_iphone17_blackfriday.csv")
avg_price = df['price'].str.replace('$', '').str.replace(',', '').astype(float).mean()
print(f"iPhone17平均價格:${avg_price:.2f}")
# 簡單可視化(需安裝matplotlib)
import matplotlib.pyplot as plt
df['rating'] = df['rating'].str.extract('(\d+\.\d+)').astype(float)
df.plot(kind='bar', x='title', y='rating')
plt.title("iPhone17變體評分對比")
plt.show()
通過分析,你能發現黑五期間iPhone17的價格折扣力度、熱門變體(如Pro Max的銷量更高)等insights,幫你決策跨境電商選品。
也可以直接丟給 Pandas、或者餵給 AI 做結構化分析。
四、總結
- 選對代理:千萬別圖便宜用劣質代理,亞馬遜的黑名單庫比你想象的要全。青果網絡這類頭部廠商的IP池,清理度高,能大幅提高我們的業務成功率。
- 輪換+延時: 雖然我們用了代理,但要嚴格控制代碼武德。再加上time.sleep()頻率隨機,模擬真實人類的操作次數。
- 快速迭代:先跑通Demo,再根據業務需求做增量更新。
- 數據存下來: 存CSV或數據庫,別讓辛苦爬的數據飛了。
- 低調幹活: 控制速度,看 robots.txt,別碰不能爬的。靈活調整策略,才能在數據的“戰場”上立於不敗之地。
好啦,從代理配置到代碼落地全講完了,剩下的就是動手實操啦~
以及,青果網絡也有免費測試,對爬蟲工程師來説上手成本也很低,用來跑Amazon這種站點會省掉很多無意義的折騰。有需要的可以去瞅瞅~