公牛作为国内领先的民用电工与智能电气品牌,自创立以来,依托其强大的产品品质与渠道建设能力,积极布局线下零售网络,打造了覆盖全国的“公牛旗舰店”及授权销售网点体系。公牛门店不仅是产品销售的重要窗口,更是集品牌展示、产品体验、专业咨询和售后服务于一体的综合服务平台,成为公牛品牌与消费者之间沟通的重要桥梁。公牛始终坚持“安全用电,守护万家”的理念,依托丰富的产品线和完善的供应链体系,结合线下门店的标准化形象与专业服务,为消费者提供安全、可靠、智能化的用电解决方案。
在注重产品功能与质量的同时,公牛门店也强调空间设计的现代感与服务体验的人性化,营造出简洁、专业、富有科技感的购物环境,提升消费者在选购过程中的信任感与满意度。门店广泛分布于各大城市的核心商圈、建材市场及家电卖场,形成了高密度、广覆盖的终端网络,有效支撑了品牌在C端市场的渗透与影响力提升。
本文将探讨如何通过POST请求从官方网站或公开接口中获取公牛门店的分布信息,并展示使用Python的requests库发送HTTP请求的方法,以提取详细的门店位置数据。这些信息涵盖全国范围内的公牛旗舰店及重点销售网点,通过解析返回的JSON数据或HTML内容,实现对门店名称、地址、所在区域等关键字段的结构化提取。此类数据采集方式有助于深入分析公牛在不同省市的渠道布局策略、区域市场覆盖率及其与人口经济分布的关联性。通过对门店数据的清洗与整理,还可为后续的地理可视化、商圈分析、渠道优化及市场拓展预测提供坚实的数据支持。
公牛旗舰店查询官方网址:公牛旗舰店查询
首先,我们找到门店数据的存储位置,然后看3个关键部分标头、负载、 预览;
标头:通常包括URL的连接,也就是目标资源的位置;
负载:对于POST请求:负载通常包含了传递的参数,因为所有参数都通过URL传递,这里我们可以看到省份、地级市、市,县级市的明文,没有进行加密;
预览:指的是对响应内容的快速查看或摘要显示,可以帮助用户快速了解返回的数据结构或内容片段,我们可以看到与其他方式不同,数据是直接存在了html里;
接下来就是数据获取部分,先讲一下方法思路,一共三个步骤;
方法思路
- 找到对应数据存储位置,获取所有店铺列表的相关标签数据;
- 我们通过page 从 1 到 maxpage 循环,来遍历全国门店数据;
- 地理编码→地址转经纬度,再通过coord-convert库实现GCJ-02转WGS84;
第一步:我们直接在"Fetch/XHR"先找到对应数据存储位置,获取所有店铺列表, 我们可以看到门店信息直接存在html,并且包括的全国所有的数据,所以我们直接遍历整个html,将 page 从 1 到 maxpage 循环,获取全部门店即可;
第二步:利用POST请求获取所有店铺列表,并根据标签进行保存,另存为csv;
完整代码#运行环境 Python 3.11
import requests
import time
from bs4 import BeautifulSoup
import csv
# ========== 配置信息 ==========
url = "https://www.gongniu.cn/index.php?m=content&c=search&a=mdlist"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Origin': 'https://www.gongniu.cn',
'Referer': 'https://www.gongniu.cn/',
}
# 固定参数(地区等)
base_data = {
'pagesize': '5',
'key': '',
's_province': '省份',
's_city': '地级市',
's_county': '市、县级市',
'noid': '281',
'catid': '281'
}
# 存储所有门店信息
all_stores = []
# ========== 第一步:获取总页数 maxpage ==========
print("正在获取第一页以确定总页数...")
first_data = {**base_data, 'page': '1'}
try:
response = requests.post(url, headers=headers, data=first_data, timeout=10)
response.raise_for_status()
result = response.json()
if result.get('status') != 1:
print("接口返回失败:", result.get('info', '未知错误'))
exit()
maxpage = result['data']['maxpage']
print(f"共 {maxpage} 页,开始爬取...")
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
exit()
except Exception as e:
print(f"解析失败: {e}")
exit()
# ========== 第二步:遍历每一页 ==========
for page in range(1, maxpage + 1):
print(f"正在爬取第 {page} 页...")
page_data = {**base_data, 'page': str(page)}
try:
response = requests.post(url, headers=headers, data=page_data, timeout=10)
if response.status_code != 200:
print(f"第 {page} 页请求失败,状态码: {response.status_code}")
continue
result = response.json()
if result.get('status') != 1:
print(f"第 {page} 页接口返回失败: {result.get('info')}")
continue
html_content = result['data']['html']
soup = BeautifulSoup(html_content, 'html.parser')
for li in soup.find_all('li'):
title_tag = li.find('a', class_='tit1')
address_tag = li.find('p')
name = title_tag.get_text(strip=True) if title_tag else "未知门店"
address = address_tag.get_text(strip=True).replace('门店地址:', '') if address_tag else "未知地址"
all_stores.append({
'name': name,
'address': address
})
# 控制请求频率,避免被封
time.sleep(1)
except Exception as e:
print(f"解析第 {page} 页时出错: {e}")
continue
print(f" 爬取完成!共获取 {len(all_stores)} 家门店。")
# ========== 第三步:保存为 CSV 文件 ==========
csv_filename = 'gongniu_stores.csv'
with open(csv_filename, 'w', encoding='utf-8-sig', newline='') as f: # utf-8-sig 避免 Excel 中文乱码
writer = csv.DictWriter(f, fieldnames=['name', 'address'])
writer.writeheader()
writer.writerows(all_stores)
print(f" 所有门店信息已保存至: {csv_filename}")
获取数据标签如下,店铺名称、店铺名称地址;
如果需要换成单个城市,直接把这里的城市换成对应的需要查询的城市即可;
如果需要获取城市的层级关系,在"网络"里随便检索一个二级行政区,比如"石家庄市",我们就可以找到行政区对应关系;
第三步:地理编码和坐标系转换,这里因为数据标签没有直接的坐标数据,需要把获取的门店地址进行地理编码,具体实现方法可以参考我这篇文章:地址转坐标:利用高德API进行批量地理编码_高德地图api-CSDN博客;
这里直接下载转换结果,坐标系GCJ-02,当然还有个别地址描述太模糊的或者格式无法识别,会查不出坐标,手动查一下坐标即可,大部分还是可以查到的,因为当前坐标系是GCJ02,需要批量转成WGS84/BD09的话可以用免费这个网站:批量转换工具:地图坐标系批量转换 - 免费在线工具 (latlongconverter.online),也可以通过coord-convert库实现GCJ-02转WGS84;
对CSV文件中的门店坐标列进行转换。完成坐标转换后,再将数据导入ArcGIS进行可视化;
接下来,我们进行看图说话:
在东部沿海地区,如广东、江苏、浙江、山东等省份,公牛门店的数量显著高于其他地区。这些省份不仅人口密集,而且经济活动频繁,居民消费水平较高,对高品质用电产品的需求旺盛。因此,公牛选择在这些地区密集布点,以满足市场需求并提升品牌影响力。此外,东部沿海地区的物流网络发达,供应链管理便捷,有助于公牛高效地进行产品配送和服务支持。
在中部地区,如河南、湖北、湖南等省份,公牛门店也表现出较强的渗透力。尽管与东部沿海地区相比,中部地区的门店密度稍低,但整体分布较为均匀,覆盖了多个城市和乡镇。这表明公牛在中部地区采取了广泛的渠道布局策略,通过旗舰店和授权销售网点相结合的方式,实现了对不同层级市场的有效覆盖。
相比之下,西部和东北地区的公牛门店分布相对稀疏。这些地区的经济发展水平和人口密度较低,市场规模相对较小。然而,公牛并未忽视这些市场,在一些重点城市和经济中心仍设有门店,以保持品牌存在感并逐步拓展市场。随着西部大开发和东北振兴战略的推进,未来这些地区的市场潜力有望进一步释放,公牛门店的布局也可能随之调整。
从城市等级来看,一线城市和新一线城市是公牛门店布局的重点区域,门店数量最多且分布最为密集。这些城市的消费者对高品质、智能化的用电产品需求强烈,公牛通过在核心商圈设立旗舰店,提供沉浸式的产品体验和专业服务,有效提升了品牌形象和用户满意度。而在二三线城市及以下,公牛则更多依赖于授权销售网点和专卖店,实现对更广泛市场的覆盖。
文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。