HTML应用指南:利用GET请求获取全国盒马门店位置信息

随着新零售业态的发展,门店位置信息的获取变得至关重要。作为新零售领域的先锋,盒马鲜生不仅在商业模式创新上持续领先,还积极构建广泛的门店网络,以支持其不断增长的用户群体。本篇文章,我们将继续探究GET请求的实际应用,我们使用Python的requests库通过GET请求,从盒马鲜生官方网站获取门店位置信息,包括全国业态的盒马鲜生店、盒马X会员店、盒马邻里店、盒马奥莱店,通过解析构造请求、响应数据以及实现数据可视化,并通过可视化分析来展示盒马鲜生在我国的分布情况。

盒马鲜生官方网址:盒马

    我们第一步先找到门店数据的存储位置,然后看3个关键部分标头、负载、 预览;

    标头:通常包括URL的连接,也就是目标资源的位置;

    负载:对于GET请求:负载通常包含了传递的参数,有些网页负载可能为空,或者没有负载,因为所有参数都通过URL传递;

    盒马就没有负载这一部分,那么为什么没有呢?

    根据 HTTP/1.1 的规范(RFC 7231),GET 请求不应包含请求体。虽然技术上可以在 GET 请求中包含请求体,但这并不符合规范,且大多数服务器和中间件不会处理 GET 请求中的请求体,也就是说HTTP 协议没有为 GET的请求体赋予语义,也就是即不要求也不禁止 GET 请求带请求体;

    前面的状态码提到了200 OK (从磁盘缓存)  又是什么意思?

    200 好理解,也就是 HTTP 状态码,表示请求已成功处理,那什么是从磁盘缓存?

     (从磁盘缓存) 缓存机制:这部分信息表明响应内容是从客户端的缓存中获取的,而不是直接从服务器获取的。缓存可以是浏览器的内存缓存或磁盘缓存。

    磁盘缓存:当浏览器访问某个资源时,它会将该资源存储在本地的磁盘缓存中,以便在后续请求中快速访问,而无需再次向服务器发送请求。这有助于提高加载速度和减少网络带宽的使用。

    预览:指的是对响应内容的快速查看或摘要显示,可以帮助用户快速了解返回的数据结构或内容片段;

    接下来就是数据获取部分,先讲一下方法思路,一共三个步骤;

    方法思路

    1. 获取所有店铺列表的相关标签数据,另存为csv;
    2. 根据每个店铺地址信息查询地理坐标信息;
    3. 坐标转换,GCJ-02转WGS84;

    第一步:我们先找到对应数据存储位置,获取所有店铺列表,并根据标签进行保存,另存为csv;

    完整代码#运行环境 Python 3.11

    import requests
    import json
    import csvdef fetch_json_data():# 请求的 URLurl = 'https://hema-infra-center.oss-cn-zhangjiakou.aliyuncs.com/lnc/store.json'# 自定义请求头headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Mobile Safari/537.36 Edg/132.0.0.0'}try:# 发送 GET 请求response = requests.get(url, headers=headers)# 检查响应状态response.raise_for_status()  # 如果响应状态码不是 200,将引发异常# 解析 JSON 数据data = response.json()# 打开 CSV 文件以写入数据with open('store_data.csv', mode='w', newline='', encoding='utf-8') as csv_file:fieldnames = ['resourceName','address','city','county','province','bizStatus','bizStatusName','businessFormat','businessFormatName','role','roleName']writer = csv.DictWriter(csv_file, fieldnames=fieldnames)writer.writeheader()  # 写入表头# 遍历 data 列表for item in data.get("data", []):  # 从 JSON 中提取 "data" 字段writer.writerow({'resourceName': item.get("resourceName"),'address': item.get("address"),'city': item.get("city"),'county': item.get("county"),'province': item.get("province"),'bizStatus': item.get("bizStatus"),'bizStatusName': item.get("bizStatusName"),'businessFormat': item.get("businessFormat"),'businessFormatName': item.get("businessFormatName"),'role': item.get("role"),'roleName': item.get("roleName")})print("数据已成功保存到 store_data.csv")except requests.exceptions.RequestException as e:print(f"请求错误: {e}")if __name__ == "__main__":fetch_json_data()

    这里我们已经拿到了所有门店的标签数据和门店地址信息,包括地址(address)、业务状态(bizStatus)表示商店的运营状态,通常用数字表示,而业务状态名称(bizStatusName)则是其中文描述,如“正常”表示商店正常运营。业务格式(businessFormat)指商店的经营模式或类型,简写为“ALZK”,而业务格式名称(businessFormatName)则是其中文描述,例如“奥莱折扣”。城市ID(cityId)、区县(county)、省份(province),这里解释一下role标签中的NB,意为Neighbour Business(社邻商业)也就是盒马邻里,Fresh也就是盒马鲜生;

    第二步部分:坐标系转换,因为数据用的是高德坐标系(GCJ02),我们需要把转换成wgs84坐标系在argis上展示才不会偏移,我们把csv的坐标列手动分列一下,并把坐标从高德坐标系(GCJ02)转到WGS84,具体实现方法可以参考我这篇文章:地址转坐标:利用高德API进行批量地理编码_高德地图api-CSDN博客;

    这里可以直接下载转换结果,坐标系GCJ-02,当然还有个别地址描述太模糊的或者格式无法识别,会查不出坐标,手动查一下坐标即可,大部分还是可以查到的,因为当前坐标系是GCJ02,需要批量转成WGS84/BD09的话可以用免费这个网站:批量转换工具:地图坐标系批量转换 - 免费在线工具 (latlongconverter.online);

    第三步部分:坐标数据可视化,我们把转好的WGS84坐标信息放到argis进行可视化,可以看到盒马门店在空间上的分布情况;

    从图中我们可以看到盒马门店的主要集中区域:盒马门店主要集中在上海及其周边地区,包括苏州、嘉兴等城市。这表明盒马在这些城市的市场渗透率较高,在大城市(如上海)中,门店分布较为密集,可能是因为这些地区的人口密度高,消费能力强,适合盒马的商业模式。

    文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13627.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    20240206 adb 连不上手机解决办法

    Step 1: lsusb 确认电脑 usb 端口能识别设备 lsusb不知道设备有没有连上,就插拔一下,对比观察多了/少了哪个设备。 Step 2: 重启 adb server sudo adb kill-serversudo adb start-serveradb devices基本上就可以了~ Reference https://b…

    【BUUCTF逆向题】[MRCTF2020]Transform

    一.[MRCTF2020]Transform 64位无壳,IDA打开发现main函数进入反编译 阅读程序 先输入33位code再加密处理然后验证是否相等的题型 逆向看,验证数组byte_40F0E0已知 再往上看加密处理方式 就是将Str(我们输入的flag)的每一个索引处…

    寒假2.5

    题解 web:[网鼎杯 2020 朱雀组]phpweb 打开网址,一直在刷新,并有一段警告 翻译一下 查看源码 每隔五秒钟将会提交一次form1,index.php用post方式提交了两个参数func和p,func的值为date,p的值为Y-m-d h:i:s a 执行fu…

    【正点原子K210连载】第六十七章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

    第六十七章 音频FFT实验 本章将介绍CanMV下FFT的应用,通过将时域采集到的音频数据通过FFT为频域。通过本章的学习,读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节: 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

    【Prometheus】如何通过golang生成prometheus格式数据

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

    从零开始:OpenCV 图像处理快速入门教程

    文章大纲 第1章 OpenCV 概述 1.1 OpenCV的模块与功能  1.2 OpenCV的发展 1.3 OpenCV的应用 第2章 基本数据类型 2.1 cv::Vec类 2.2 cv::Point类 2.3 cv::Rng类 2.4 cv::Size类 2.5 cv:&…

    Vim跳转文件及文件行结束符EOL

    跳转文件 gf 从当前窗口打开那个文件的内容,操作方式:让光标停在文件名上,输入gf。 Ctrlo 从打开的文件返回之前的窗口 Ctrlwf 可以在分割的窗口打开跳转的文件,不过在我的实验不是次次都成功。 统一行尾格式 文本文件里存放的…

    MLA 架构

    注:本文为 “MLA 架构” 相关文章合辑。 未整理去重。 DeepSeek 的 MLA 架构 原创 老彭坚持 产品经理修炼之道 2025 年 01 月 28 日 10:15 江西 DeepSeek 的 MLA(Multi-head Latent Attention,多头潜在注意力)架构 是一种优化…

    变压器-000000

    最近一个项目是木田12V的充电器,要设计变压器,输出是12V,电压大于1.5A12.6*1.518.9W. 也就是可以将变压器当成初级输入的一个负载。输入端18.9W. 那么功率UI 。因为变压器的输入是线性上升的,所以电压为二份之一,也就是1/2*功率…

    【DeepSeek】私有化本地部署图文(Win+Mac)

    目录 一、DeepSeek本地部署【Windows】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 a、直接访问 b、chatbox网页访问 二、DeepSeek本地部署【Mac】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 5、删除已下载的模型 三、DeepSeek其他 …

    02vue3实战-----项目目录详解

    02vue3实战-----项目目录详解 1.目录完整结构2.extensions.json文件3.node_modules文件夹4.public文件夹5.src文件夹6.文件.gitignore7.文件env.d.ts8.文件index.html9.文件package-lock.json和文件package.json10.文件README.md11.文件vite.config.ts12.文件tsconfig.json和文…

    ubuntu20.04+RTX4060Ti大模型环境安装

    装显卡驱动 这里是重点,因为我是跑深度学习的,要用CUDA,所以必须得装官方的驱动,Ubuntu的附件驱动可能不太行. 进入官网https://www.nvidia.cn/geforce/drivers/,选择类型,最新版本下载。 挨个运行&#…

    Fedora 的 2025 年展望:AI 集成与 HDR 支持打造强大 Linux 桌面体验

    Fedora 项目已经从节庆活动中恢复,准备在未来几个月推出一系列关键计划。Red Hat 软件工程总监 Christian Schaller 在他的博客文章中分享了 2025 年 Fedora 发行版的重点发展方向和优先事项,涵盖了人工智能集成、Wayland、HDR 协议、PipeWire 等多个领域…

    java时间相关类

    时间相关类 JDK7以前时间相关类Date时间时间换算 SimpleDateFormat格式化时间作用格式化时间常用模式对应关系 Calendar日历作用Calendar常用方法 JDK8新增时间相关类Date类ZoneId常用方法 Instant时间戳常见方法 ZoneDateTime带时区的时间常用方法 日期格式化类常用方法 日历类…

    js-对象-JSON

    JavaScript自定义对象 JSON 概念: JavaScript Object Notation,JavaScript对象标记法. JSON 是通过JavaScript 对象标记法书写的文本。 由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输. json中属性名(k…

    深入理解 Java 接口的回调机制 【学术会议-2025年人工智能与计算智能(AICI 2025)】

    大会官网:www.icaici.org 前言 回调是一种非常重要的编程技术,它广泛应用于事件驱动的编程、异步任务和框架设计中。在 Java 中,回调机制通常通过 接口 来实现。本篇博客将详细解析 Java 接口的回调原理、实现方式,以及实际开发中…

    import { Component, Vue, Prop, Watch } from ‘vue-property-decorator‘

    文章目录 导入部分的解释总结Vue 3 的推荐替代方案总结 你提供的代码片段是使用 vue-property-decorator 库的示例,这是一个第三方库,它提供了 Vue 组件的装饰器,使得编写类风格的 Vue 组件更加方便。以下是对代码中每个部分的详细解释&…

    【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信

    引言 我们之前了解了在不同场景下,Kubernetes中Pod之间的通信是如何路由的。 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信现在,我们来看看在集群中,Pod与服务之间的通信是如何…

    el-table中的某个字段最多显示两行,超出部分显示“...详情”,怎么办

    文章目录 背景需求需求分析 解决方案在线体验灵感来源我的实现方案 总结 背景 需求 比如,有如下一个表格,请你实现它: 要求: 最多显示两行超出部分显示为:“…详情”点击详情,展开全部内容 说明&#x…

    如何获取sql数据中时间的月份、年份(类型为date)

    可用自带的函数month来实现 如: 创建表及插入数据: create table test (id int,begindate datetime) insert into test values (1,2015-01-01) insert into test values (2,2015-02-01) 执行sql语句,获取月份: select MONTH(begindate)…