当前位置: 首页 > article >正文

HTML应用指南:利用GET请求获取全国捞王锅物料理门店位置信息

随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为知名中式餐饮品牌之一,捞王锅物料理自2009年创立以来,始终致力于为消费者提供高品质的锅物料理与贴心的服务体验。经过多年的发展,捞王在全国范围内不断拓展门店网络,目前已覆盖多个一、二线城市,形成了较为完善的线下服务体系。为了更好地理解和利用这些门店数据,本文将深入探讨GET请求的实际应用,并展示如何通过Python的requests库发送GET请求,从捞王锅物料理官方网站获取详细的门店位置信息,包括全国范围内的所有捞王门店信息。

本文将以爬取官网中的门店信息页面为例,介绍如何解析网页结构、构造合适的请求、处理响应数据,并最终实现数据可视化,展示捞王锅物料理在我国各地区的分布情况。

捞王锅物料理官方网址:门店-门店-捞王(上海)餐饮管理有限公司

首先,在浏览器开发者工具中查看“Network”面板下的“Fetch/XHR”请求时,我们发现其门店信息页面并未使用AJAX或Fetch API进行动态加载,而是直接将门店信息嵌入在HTML源码中。这意味着该页面的数据属于静态内容,可以通过直接解析HTML的方式获取所需信息,无需模拟异步请求或使用Selenium等自动化工具。

那我们需要调整一下策略,我们第一步先找到门店数据的存储HTML位置,然后再看3个关键部分标头、负载、 预览;

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

负载:对于GET请求:负载通常包含了传递的参数,有些网页负载可能为空,或者没有负载,比如捞王锅物料理门店网址这里就没有负载;

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

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

方法思路

  1. 找到对应数据存储位置,读取整个HTML,识别关键字段存储特征;
  2. 获取所有店铺列表的相关标签数据,另存为csv;
  3. 坐标系转换,通过coord-convert库实现 GCJ-02转WGS84;

第一步:通过页面测试发现,我们发现,一个城市对应一个页面,对应一个html,不同的之处在于城市编码,比如上海就是对应的7,江苏对应的是8之类的,我们先手动获取所有城市不同编码;

接下来,我们先找到对应数据存储位置,获取所有店铺列表和数据标签,我们可以看到,数据结构是包含门店名称、地址、电话接下来,我们就通过脚本来读取整个HTML;

第二步:利用GET请求获取所有店铺列表,并根据标签进行保存,另存为csv;

完整代码#运行环境 Python 3.11

import requests
from bs4 import BeautifulSoup
import re
import time
import csv
import os
from datetime import datetimedef get_store_info(product_id):# 设置请求URLurl = f"http://www.wanthotpot.com/product/{product_id}/"# 设置请求头headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36 Edg/136.0.0.0'}try:# 发送GET请求response = requests.get(url, headers=headers)# 使用BeautifulSoup解析HTMLsoup = BeautifulSoup(response.text, 'html.parser')# 查找所有店铺信息divstore_divs = soup.find_all('div', class_='cbox-8-1 p_item')# 存储所有店铺信息stores = []# 遍历每个店铺divfor store_div in store_divs:store_info = {}# 获取店名name = store_div.find('p', class_='e_text-4 s_summary')if name:store_info['店名'] = name.text.strip()# 获取地址address = store_div.find('p', class_='e_text-6 s_summary')if address:# 使用正则表达式提取地址文本address_text = re.sub(r'地址:', '', address.text.strip())store_info['地址'] = address_text.strip()# 获取电话phone = store_div.find('p', class_='e_text-7 s_summary')if phone:# 使用正则表达式提取电话文本phone_text = re.sub(r'电话:', '', phone.text.strip())store_info['电话'] = phone_text.strip()stores.append(store_info)# 打印所有店铺信息print(f"\n产品ID {product_id} 的店铺信息:")for i, store in enumerate(stores, 1):print(f"\n店铺 {i}:")print(f"店名: {store.get('店名', 'N/A')}")print(f"地址: {store.get('地址', 'N/A')}")print(f"电话: {store.get('电话', 'N/A')}")return storesexcept Exception as e:print(f"请求产品ID {product_id} 时出错: {str(e)}")return []def append_to_csv(product_id, stores, csv_file):# 如果文件不存在,创建文件并写入表头file_exists = os.path.exists(csv_file)with open(csv_file, 'a', newline='', encoding='utf-8-sig') as f:writer = csv.writer(f)# 如果文件不存在,写入表头if not file_exists:writer.writerow(['产品ID', '店名', '地址', '电话'])# 写入数据for store in stores:writer.writerow([product_id,store.get('店名', 'N/A'),store.get('地址', 'N/A'),store.get('电话', 'N/A')])def main():# 要遍历的产品ID列表product_ids = [7, 8, 9, 10, 11, 14, 16, 24, 44, 46, 63, 65]# 指定保存路径(保存到桌面)output_dir = os.path.join(os.path.expanduser("~"), "Desktop", "店铺数据")if not os.path.exists(output_dir):os.makedirs(output_dir)# 生成带时间戳的文件名timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")csv_file = os.path.join(output_dir, f"店铺信息_{timestamp}.csv")# 打印完整的保存路径print(f"数据将保存到文件: {csv_file}")# 遍历每个产品IDfor product_id in product_ids:print(f"\n正在获取产品ID {product_id} 的信息...")stores = get_store_info(product_id)# 立即将数据写入CSV文件append_to_csv(product_id, stores, csv_file)print(f"产品ID {product_id} 的数据已保存到CSV文件")# 添加延时,避免请求过于频繁time.sleep(2)print(f"\n所有数据已保存到文件: {csv_file}")print(f"文件完整路径: {os.path.abspath(csv_file)}")if __name__ == "__main__":main()

数据会以csv表格的形式,保存在运行脚本的目录下,数据标签包括:店铺名称、详细地址、电话;

第三步:地理编码和坐标系转换,这里因为数据标签没有直接的坐标数据,需要把获取的门店地址进行地理编码,具体实现方法可以参考我这篇文章:地址转坐标:利用高德API进行批量地理编码_高德地图api-CSDN博客;

这里直接下载转换结果,坐标系GCJ-02,当然还有个别地址描述太模糊的或者格式无法识别,会查不出坐标,手动查一下坐标即可,大部分还是可以查到的,因为当前坐标系是GCJ02,需要批量转成WGS84/BD09的话可以用免费这个网站:批量转换工具:地图坐标系批量转换 - 免费在线工具 (latlongconverter.online),也可以通过coord-convert库实现GCJ-02转WGS84;
对CSV文件中的服务网点坐标列进行转换。完成坐标转换后,再将数据导入ArcGIS进行可视化;

接下来,我们进行看图说话:

城市层级分布:

  • 一、二线城市为核心:捞王锅物料理主要集中在经济发达、人口密集的一、二线城市,如上海、北京、广州、深圳、杭州、南京和成都等。这些城市拥有较高的消费能力和对高品质餐饮的需求,为捞王提供了良好的市场基础。
  • 向强三线城市扩展:近年来,随着品牌影响力的增强及市场策略的调整,捞王开始逐步向一些消费能力较强且饮食文化多元化的强三线城市进行拓展。这不仅有助于品牌的进一步扩大,也能满足更多消费者对于高品质餐饮体验的需求。

商圈选址偏好:

  • 核心商圈与购物中心:捞王门店多位于城市的商业中心区或大型购物中心内,这类位置人流量大,能有效吸引顾客前来就餐。
  • 注重可视性与交通便利性:为了提升品牌形象并方便顾客到达,捞王通常会选择在商场中高层(例如3-4层)开设门店,并确保店铺具有良好的可视性和便捷的交通条件,以此打造独特的“目的地型”就餐体验。

门店密度与区域集中度:

  • 华东地区为大本营:作为捞王的发展起源地,华东地区的门店密度最高,尤其是在上海,这里不仅是捞王的品牌发源地,也是其最为重要的市场之一。
  • 华南、华北、华中等地加速布局:除了华东地区外,捞王还在华南、华北、华中等多个区域加快了开店速度,逐渐形成了一定的区域集中效应。通过这种战略布局,捞王旨在实现全国范围内的均衡发展,同时巩固和扩大其市场份额。

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

相关文章:

HTML应用指南:利用GET请求获取全国捞王锅物料理门店位置信息

随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为知名中式餐饮品牌之一,捞王锅物料理自2009年创立以来,始终致力于为消费者提供高品质的锅物料理与贴心的服务体验。经过多年的发展,捞王在全国范围内不断拓展门店…...

算法日记32:埃式筛、gcd和lcm、快速幂、乘法逆元

一、埃式筛(计算质数) 1.1、概念 1.1.1、在传统的计算质数中,我们采用单点判断,即判断(2~sqrt(n))是否存在不合法元素,若存在则判否,否则判是 1.1.2、假设,此时我们需要求1~1000的所有质数&am…...

黑马点评-分布式锁Lua脚本

文章目录 分布式锁Redis setnxredis锁误删Lua脚本 分布式锁 当我们的项目服务器不只是一台(单体),而是部署在多态服务器上(集群/分布式),同样会出现线程安全问题。不同服务器内部有不同的JVM,每…...

P7-大规模语言模型分布式训练与微调框架调研文档

1. 引言 随着大语言模型(LLMs)在自然语言处理(NLP)、对话系统、文本生成等领域的广泛应用,分布式训练和高效微调技术成为提升模型性能和部署效率的关键。分布式训练框架如 Megatron-LM 和 DeepSpeed 针对超大规模模型…...

机械师安装ubantu双系统:三、GPT分区安装Ubantu

目录 一、查看磁盘格式 二、安装ubantu 参考链接: GPT分区安装Ubuntu_哔哩哔哩_bilibili 一、查看磁盘格式 右击左边灰色区域,点击属性 二、安装ubantu 插入磁盘,重启系统,狂按F7(具体我也忘了)&#…...

ORM++ 封装实战指南:安全高效的 C++ MySQL 数据库操作

ORM 封装实战指南:安全高效的 C MySQL 数据库操作 一、环境准备 1.1 依赖安装 # Ubuntu/Debian sudo apt-get install libmysqlclient-dev # CentOS sudo yum install mysql-devel# 编译时链接库 (-I 指定头文件路径 -L 指定库路径) g main.cpp -stdc17 -I/usr/i…...

kafka学习笔记(三、消费者Consumer使用教程——从指定位置消费)

1.简介 Kafka的poll()方法消费无法精准的掌握其消费的起始位置,auto.offset.reset参数也只能在比较粗粒度的指定消费方式。更细粒度的消费方式kafka提供了seek()方法可以指定位移消费允许消费者从特定位置(如固定偏移量、时间戳或分区首尾)开…...

【后端高阶面经:架构篇】46、分布式架构:如何应对高并发的用户请求

一、架构设计原则:构建可扩展的系统基石 在分布式系统中,高并发场景对架构设计提出了极高要求。 分层解耦与模块化是应对复杂业务的核心策略,通过将系统划分为客户端、CDN/边缘节点、API网关、微服务集群、缓存层和数据库层等多个层次,实现各模块的独立演进与维护。 1.1 …...

网络编程学习笔记——TCP网络编程

文章目录 1、socket()函数2、bind()函数3、listen()4、accept()5、connect()6、send()/write()7、recv()/read()8、套接字的关闭9、TCP循环服务器模型10、TCP多线程服务器11、TCP多进程并发服务器 网络编程常用函数 socket() 创建套接字bind() 绑定本机地址和端口connect() …...

Vue+element-ui,实现表格渲染缩略图,鼠标悬浮缩略图放大,点击缩略图播放视频(一)

Vueelement-ui,实现表格渲染缩略图,鼠标悬浮缩略图放大,点击缩略图播放视频 前言整体代码预览图具体分析基础结构主要标签作用videoel-popover 前言 如标题,需要实现这样的业务 此处文章所实现的,是静态视频资源。 注…...

day13 leetcode-hot100-22(链表1)

160. 相交链表 - 力扣(LeetCode) 1.哈希集合HashSet 思路 (1)将A链的所有数据存储到HashSet中。 (2)遍历B链,找到是否在A中存在。 具体代码 /*** Definition for singly-linked list.* pu…...

【Oracle】DQL语言

个人主页:Guiat 归属专栏:Oracle 文章目录 1. DQL概述1.1 什么是DQL?1.2 DQL的核心功能 2. SELECT语句基础2.1 基本语法结构2.2 最简单的查询2.3 DISTINCT去重 3. WHERE条件筛选3.1 基本条件运算符3.2 逻辑运算符组合3.3 高级条件筛选 4. 排序…...

HUAWEI华为MateBook D 14 2021款i5,i7集显非触屏(NBD-WXX9,NbD-WFH9)原装出厂Win10系统

适用型号:NbD-WFH9、NbD-WFE9A、NbD-WDH9B、NbD-WFE9、 链接:https://pan.baidu.com/s/1qTCbaQQa8xqLR-4Ooe3ytg?pwdvr7t 提取码:vr7t 华为原厂WIN系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office…...

【STIP】安全Transformer推理协议

Secure Transformer Inference Protocol 论文地址:https://arxiv.org/abs/2312.00025 摘要 模型参数和用户数据的安全性对于基于 Transformer 的服务(例如 ChatGPT)至关重要。虽然最近在安全两方协议方面取得的进步成功地解决了服务 Transf…...

leetcode hot100刷题日记——27.对称二叉树

方法一:递归法 class Solution { public:bool check(TreeNode *left,TreeNode *right){//左子树和右子树的节点同时是空的是对称的if(leftnullptr&&rightnullptr){return true;}if(leftnullptr||rightnullptr){return false;}//检查左右子树的值相不相等&a…...

高考加油(Python+HTML)

前言 询问DeepSeek根据自己所学到的知识来生成多个可执行的代码,为高考学子加油。最开始生成的都会有点小问题,还是需要自己调试一遍,下面就是完整的代码,当然了最后几天也不会有多少人看,都在专心的备考。 Python励…...

贪心算法应用:Ford-Fulkerson最大流问题详解

Java中的贪心算法应用:Ford-Fulkerson最大流问题详解 1. 最大流问题概述 最大流问题(Maximum Flow Problem)是图论中的一个经典问题,旨在找到一个从源节点(source)到汇节点(sink)的最大流量。Ford-Fulkerson方法是解决最大流问题的经典算法之一,它属于贪心算法的范畴…...

UE5 Niagara 如何让四元数进行旋转

Axis Angle中,X,Y,Z分别为旋转的轴向,W为旋转的角度,在这里旋转角度不需要除以2,因为里面已经除了,再将计算好的四元数与要进行旋转的四元数进行相乘,结果就是按照原来的角度绕着某一轴向旋转了某一角度...

从“黑箱”到透明化:MES如何重构生产执行全流程?

引言 在传统制造企业中,生产执行环节常面临“计划混乱、进度难控、异常频发、数据滞后”的困境。人工派工效率低下、物料错配频发、质量追溯困难等问题,直接导致交付延期、成本攀升、客户流失。深蓝易网MES系统以全流程数字化管理为核心,通过…...

探索Linux互斥:线程安全与资源共享

个人主页:chian-ocean 文章专栏-Linux 前言: 互斥是并发编程中避免竞争条件和保护共享资源的核心技术。通过使用锁或信号量等机制,能够确保多线程或多进程环境下对共享资源的安全访问,避免数据不一致、死锁等问题。 竞争条件 竞…...

JWT安全:假密钥.【签名随便写实现越权绕过.】

JWT安全:假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上,它们可以包含任何类型的数据,但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…...

Python爬虫实战:抓取百度15天天气预报数据

🌐 编程基础第一期《9-30》–使用python中的第三方模块requests,和三个内置模块(re、json、pprint),实现百度地图的近15天天气信息抓取 记得安装 pip install requests📑 项目介绍 网络爬虫是Python最受欢迎的应用场景之一&…...

RV1126 + FFPEG多路码流项目

代码主体思路&#xff1a; 一.VI,VENC,RGA模块初始化 1.先创建一个自定义公共结构体&#xff0c;用于方便管理各个模块 rkmedia_config_public.h //文件名字#ifndef _RV1126_PUBLIC_H #define _RV1126_PUBLIC_H#include <assert.h> #include <fcntl.h> #include …...

NodeJS 基于 Koa, 开发一个读取文件,并返回给客户端文件下载,以及读取文件形成列表和文件删除的代码演示

前言 在上一篇文章 《Nodejs 实现 Mysql 数据库的全量备份的代码演示》 中&#xff0c;我们演示了如何将用户的 Mysql 数据库进行备份的代码。但是&#xff0c;这个备份&#xff0c;只是备份在了服务器上了。 而我们用户的真实需求&#xff0c;是需要将备份文件下载到本地进行…...

为什么在我的Flask里面有两个路由,但是在网页里有一个却不能正确访问到智能体

1. /zhoushibo 能访问&#xff0c;/chat 直接浏览器访问报 Method Not Allowed 原因&#xff1a; /zhoushibo 路由是你用 app.route(/zhoushibo) 定义的&#xff0c;返回的是一个HTML网页&#xff0c;浏览器访问没问题。 /chat 路由你用的是 app.route(/chat, methods[POST])…...

哈工大计算机系统2024大作业——Hello的程序人生

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 人工智能 学   号 2022112040 班 级 2203601 学 生 郄东昕 指 导 教 师 吴锐 计算机科学与技术学院…...

2025年软件测试面试八股文(含答案+文档)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师…...

【仿生系统】qwen的仿生机器人解决方案

收到完整需求后&#xff0c;我将从系统架构设计、算法实现路径、训练方法三个维度为您构建完整的仿生机器人解决方案。以下是分阶段实施方案&#xff1a; 一、核心系统架构设计&#xff08;模块化可进化架构&#xff09; 1. 多模态感知引擎 - 视觉子系统&#xff1a;YOLOv8SAM…...

Flutter3.22适配运行鸿蒙系统问题记录

Flutter3.22适配运行鸿蒙系统问题记录 一&#xff1a;适配条件适配过程问题记录&#xff08;1&#xff09;环境配置问题&#xff08;2&#xff09;Concurrent modification during iteration: Instance(length:2) of_GrowableList 报错&#xff08;3&#xff09;三方插件寻找替…...

秋招Day10 - JVM - 内存管理

JVM组织架构主要有三个部分&#xff1a;类加载器、运行时数据区和字节码执行引擎 类加载器&#xff1a;负责从文件系统、网络或其他来源加载class文件&#xff0c;将class文件中的二进制数据加载到内存中运行时数据区&#xff1a;运行时的数据存放的区域&#xff0c;分为方法区…...