山姆會員店作為全球知名的零售品牌,自進入中國市場以來,始終致力于為消費者提供高品質商品與便捷的購物體驗。隨著新零售業態的快速發展,門店位置信息的獲取變得愈發重要。品牌通過不斷拓展門店網絡,目前已覆蓋多個一、二線城市,形成了較為完善的線下服務體系。
本文將探討如何利用GET請求從山姆會員店中國官方網站獲取門店分布信息,并展示使用Python的requests庫發送GET請求的方法,以提取全國范圍內的詳細門店地址、營業時間等關鍵數據。通過對API返回的JSON格式響應進行解析,最終整理出結構化的門店列表。這些數據不僅有助于全面了解山姆在中國市場的擴張趨勢與區域布局特點,還能為消費者提供便捷的門店查詢服務,提升整體購物體驗。
結合各城市的門店密度、選址特征及消費環境分析,還可進一步洞察不同地區的消費需求與偏好差異,為山姆未來的新店選址、營銷策略優化以及產品結構調整提供有力的數據支持和決策依據。
?山姆會員商店地址:門店
我們可以看到網頁的數據是直接暴露在網頁端的,意味著數據大概率是靜態數據,直接使用get請求即可訪問,通過在點擊在頁面選擇元素的按鈕,也就是圖上上端框框里面的按鈕,再選擇左邊的地址欄,我們可以在右邊看到地址信息,可以通過檢索關鍵詞(如address),來查詢數據位置;
我們找到門店數據的存儲位置后,然后看3個關鍵部分標頭、負載、?預覽;
標頭:通常包括URL的連接,也就是目標資源的位置;
負載:對于GET請求可以不攜帶負載;
預覽:指的是對響應內容的快速查看或摘要顯示,可以幫助用戶快速了解返回的數據結構或內容片段,根據數據標簽我們可以看到里面包含了多個門店的信息,但是數據使用的都是Unicode 編碼;
第一步:我們發現數據存在一個shoplist的js文件里,那么我們就用 Python 的 requests 庫下載該文件;
完整代碼#運行環境 Python 3.11
import requestsurl = "https://sams-home-online-1302115363.file.myqcloud.com/p__shopList__shopList.a1047480.async.js"headers = {"User-Agent": "Mozilla/5.0","Referer": "https://www.samsclub.cn/"
}try:response = requests.get(url, headers=headers)if response.status_code == 200:js_text = response.textwith open("shopList.js", "w", encoding="utf-8") as f:f.write(js_text)print("成功下載并保存 JS 文件")else:print(f"請求失敗,狀態碼:{response.status_code}")except requests.exceptions.RequestException as e:print(f"請求失敗: {e}")except IOError as e:print(f"文件寫入失敗: {e}")
腳本執行完成,我們就得到了一個名為shopList.js的js文件;
第二步:打開 shopList.js 文件進行分析,查看文件中是否有明顯的 JSON 數據結構(例如 [{}, {}, ...] 或 shopList = [...]),我們可以使用正則表達式來提取這些信息,并將提取的數據導出為 CSV 文件,方便后續分析和可視化;
完整代碼#運行環境 Python 3.11
import re
import json
import pandas as pdwith open('shop_list_module.js', 'r', encoding='utf-8') as f:js_text = f.read()# 1. 提取 r=[...],直到 ,N=function
match = re.search(r'r\s*=\s*(\[[\s\S]+?\])\s*,N=function', js_text)
if not match:raise ValueError("未找到門店數據數組 r")shop_list_js = match.group(1)# 2. 屬性名加引號(只處理最外層和 shops 內部的對象)
def js_object_to_json(js):# 屬性名加引號js = re.sub(r'([{,])(\s*)(\w+)\s*:', r'\1\2"\3":', js)return jsshop_list_json = js_object_to_json(shop_list_js)# 3. 反序列化
shop_list = json.loads(shop_list_json)# 4. 扁平化
rows = []
for city in shop_list:for shop in city['shops']:rows.append({'city_cn': city['city'],'city_en': city['cityEn'],'shop_name': shop['shopName'],'shop_address': shop['shopAddress'],'open_time': shop['openTime']})
df = pd.DataFrame(rows)
df.to_csv('shop_list.csv', index=False, encoding='utf-8-sig')
print('已導出 shop_list.csv')
獲取數據標簽如下,city_cn(城市名稱)、city_en(城市英文名稱)、shop_name(店名)、open_time(營業時間)、address(門店地址),其他一些非關鍵標簽,這里省略;
第三步:地理編碼和坐標系轉換,這里我們需要把獲取的門店地址進行地理編碼,具體實現方法可以參考我這篇文章:地址轉坐標:利用高德API進行批量地理編碼_高德地圖api-CSDN博客;
這里直接下載轉換結果,坐標系GCJ-02,當然還有個別地址描述太模糊的或者格式無法識別,會查不出坐標,手動查一下坐標即可,大部分還是可以查到的,因為當前坐標系是GCJ02,需要批量轉成WGS84/BD09的話可以用免費這個網站:批量轉換工具:地圖坐標系批量轉換 - 免費在線工具 (latlongconverter.online),也可以通過coord-convert庫實現GCJ-02轉WGS84;
接下來,我們進行看圖說話:
山姆會員店在中國的門店布局呈現出明顯的地域特征,主要集中于經濟發達、人口密集的大城市和地區。其中,東部沿海和南部地區是其重點布局區域,顯示出對這些市場中高消費能力和旺盛市場需求的高度關注。
在東部沿海地區,上海作為中國的經濟中心之一,擁有多個山姆會員店,這不僅體現了其在華東地區的市場重要性,也反映了該市強勁的消費潛力。江蘇和浙江兩省同樣設有較多門店,特別是在南京、蘇州、杭州等經濟活躍的城市,進一步增強了山姆會員店在這一區域的市場覆蓋能力。此外,廣東的廣州、深圳以及福建的福州等地也是重要的布局點,充分顯示了品牌對沿海發達城市的重視程度。
在南部地區,廣東省內如深圳、珠海等城市也有門店分布,同時廣西南寧等地也設立了山姆會員店,雖然數量相對較少,但表明品牌正逐步向內陸延伸。中部地區的武漢、長沙等城市同樣設有門店,顯示出山姆會員店正在穩步拓展其在中部市場的影響力。
北方的主要城市如北京和天津自然擁有多家門店,在西部地區,成都和重慶作為西部核心市場,均設有多個門店,盡管數量不及東部沿海地區,但仍體現出山姆會員店在全國范圍內持續推進的擴展戰略。
文章僅用于分享個人學習成果與個人存檔之用,分享知識,如有侵權,請聯系作者進行刪除。所有信息均基于作者的個人理解和經驗,不代表任何官方立場或權威解讀。