HTML应用指南:利用GET请求获取全国山姆门店位置信息
山姆会员店作为全球知名的零售品牌,自进入中国市场以来,始终致力于为消费者提供高品质商品与便捷的购物体验。随着新零售业态的快速发展,门店位置信息的获取变得愈发重要。品牌通过不断拓展门店网络,目前已覆盖多个一、二线城市,形成了较为完善的线下服务体系。
本文将探讨如何利用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;
接下来,我们进行看图说话:
山姆会员店在中国的门店布局呈现出明显的地域特征,主要集中于经济发达、人口密集的大城市和地区。其中,东部沿海和南部地区是其重点布局区域,显示出对这些市场中高消费能力和旺盛市场需求的高度关注。
在东部沿海地区,上海作为中国的经济中心之一,拥有多个山姆会员店,这不仅体现了其在华东地区的市场重要性,也反映了该市强劲的消费潜力。江苏和浙江两省同样设有较多门店,特别是在南京、苏州、杭州等经济活跃的城市,进一步增强了山姆会员店在这一区域的市场覆盖能力。此外,广东的广州、深圳以及福建的福州等地也是重要的布局点,充分显示了品牌对沿海发达城市的重视程度。
在南部地区,广东省内如深圳、珠海等城市也有门店分布,同时广西南宁等地也设立了山姆会员店,虽然数量相对较少,但表明品牌正逐步向内陆延伸。中部地区的武汉、长沙等城市同样设有门店,显示出山姆会员店正在稳步拓展其在中部市场的影响力。
北方的主要城市如北京和天津自然拥有多家门店,在西部地区,成都和重庆作为西部核心市场,均设有多个门店,尽管数量不及东部沿海地区,但仍体现出山姆会员店在全国范围内持续推进的扩展战略。
文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。