通过本文可获取全国6947个星巴克门店信息,包括:id、店名、地址(省、市、具体地址)、经纬度、营业时间等信息。
打开星巴克官网https://www.starbucks.com.cn/
,点击门店。
键盘 F12 快捷键,或者鼠标右击“检查”打开浏览器的检查页面。找到nearby?lat=&lon=
这个请求。可以看到 Reruest URL 由经度、纬度、限制数量、搜索半径等参数构成。
在 Preview 中,可以看到本次请求返回了 1429 个门店,每个门店的字段信息都是相同的结构化数据,都在 data 这个键对应的值里。
查看 response 数据,是 json 格式,其中 1 个门店信息展示如下,可以得到星巴克的 id、店名、地址(省、市、具体地址)、经纬度、营业时间等信息。
{
"meta": {
"total": 1623
},
"data": [
{
"id": "26873",
"name": "苏州市立医院店",
"address": {
"city": "苏州市",
"streetAddressLine1": "江苏省苏州市",
"streetAddressLine2": "",
"streetAddressLine3": "江苏省苏州市姑苏区道前街26号",
"postalCode": "215000"
},
"coordinates": {
"longitude": 120.62050849199296,
"latitude": 31.30114163943174
},
"today": {
"closeTime": "19:00:00",
"openTime": "06:30:00"
},
"features": [
"OG",
"DL",
"MOP"
],
"hasArtwork": false,
"storeNumber": "26873"
}
}
通过以上观察,我们总结思路:
其中的关键是如何获得第一步中份经度、纬度数据。可以参考我之前的这篇文章,https://mp.weixin.qq.com/s/C8wTMpSyYfKofQrHrWDRMA
准备工作就绪,接下来就开始获取星巴克全国门店信息。
限于文章篇幅,只列出主函数,完整的代码和数据可以在“程序员coding”公众号后台回复星巴克
获取。
首先,构建 starbucks(lon, lat)函数,解析 response
def starbucks(lon, lat):
url = "https://www.starbucks.com.cn/api/stores/nearby"
headers = {
"Cookie": "Cookie", #切换自己的Cookie
"User-Agent": "User-Agent" #切换自己的User-Agent
}
data = {
"lat": lat,
"lon": lon,
"limit": "3000",
"locale": "ZH",
"features": "",
"radius": "200000",
}
content_json = requests.get(url=url, headers=headers, params=data).json()
print("等待3s")
time.sleep(3) # 防止被检测(不要低于3)
print(content_json) # 用于观察
df = pd.DataFrame(content_json['data'])
content_list.append(df)
其次,以全国地级市的经纬度作为参数,通过 pandas 的 apply 函数执行 starbucks(lon, lat)请求函数,遍历请求得到全国所有的星巴克门店信息。
并且使用 tqdm 库,显示执行过程的进度条:
from tqdm import tqdm
tqdm.pandas(desc='获取星巴克门店进度条', unit="请求") # tqdm显示进度条
df.progress_apply(lambda x: starbucks(x['lon'], x['lat']), axis=1)
最后,可以选择导出为 csv 文件或者 excel 文件:
df.to_csv('result.csv', index=False) # 生成csv
df.to_excel('result.xlsx', index=False) # 生成excel
得到 141511 条数据,如下图所示:
经过数据去重处理,剩余 6947 条不重复数据。(数据更新时间为 2023 年 12 月 28 日)
2023 年 11 月的新闻这样写到“星巴克首席执行官纳思瀚表示:至 2023 财年末,星巴克在中国的门店数已超过 6800 家”。
经过与最新的新闻报道比对验证,可以证实本次基本上获取到了全国真实的星巴克门店数据。
之后,我将以这 6947 条数据,通过代码进行更多的分析,欢迎关注“程序员coding”公众号。
例如,各省门店数量如下:
省 | 数量 | |
---|---|---|
1 | 上海市 | 1115 |
2 | 广东省 | 986 |
3 | 浙江省 | 977 |
4 | 江苏省 | 867 |
5 | 北京市 | 560 |
6 | 四川省 | 290 |
7 | 湖北省 | 225 |
8 | 福建省 | 221 |
9 | 山东省 | 208 |
10 | 天津市 | 161 |
11 | 陕西省 | 154 |
12 | 重庆市 | 145 |
13 | 辽宁省 | 131 |
14 | 湖南省 | 114 |
15 | 安徽省 | 95 |
16 | 河北省 | 94 |
17 | 河南省 | 93 |
18 | 广西壮 | 74 |
19 | 云南省 | 73 |
20 | 江西省 | 59 |
21 | 海南省 | 52 |
22 | 吉林省 | 51 |
23 | 贵州省 | 47 |
24 | 山西省 | 43 |
25 | 黑龙江 | 38 |
26 | 内蒙古 | 35 |
27 | 甘肃省 | 23 |
28 | 宁夏回 | 9 |
29 | 青海省 | 7 |
总计 | 6947 |
门店数量 top20 的城市如下:
城市 | 数量 | |
---|---|---|
1 | 上海市 | 1115 |
2 | 北京市 | 560 |
3 | 杭州市 | 411 |
4 | 深圳市 | 330 |
5 | 广州市 | 298 |
6 | 苏州市 | 270 |
7 | 成都市 | 228 |
8 | 宁波市 | 200 |
9 | 南京市 | 193 |
10 | 武汉市 | 184 |
11 | 天津市 | 161 |
12 | 重庆市 | 145 |
13 | 西安市 | 135 |
14 | 无锡市 | 109 |
15 | 佛山市 | 94 |
16 | 长沙市 | 81 |
17 | 厦门市 | 77 |
18 | 青岛市 | 77 |
19 | 东莞市 | 71 |
20 | 福州市 | 66 |
完整的代码和数据集可在“程序员coding”公众号回复星巴克
关键词获取。