python 实战:爬取全国星巴克门店信息,上海竟有 1115 个门店!

python 实战:爬取全国星巴克门店信息,上海竟有 1115 个门店!

通过本文可获取全国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"
        }
}

总结思路

通过以上观察,我们总结思路:

  1. 根据经度、纬度等参数构建 url
  2. 用 request 库请求 url,返回值转为 json 数据
  3. 使用 pandas 库对 json 数据进行处理
  4. 将处理完的数据保存入 csv 文件或 excel 文件

准备工作:经纬度

其中的关键是如何获得第一步中份经度、纬度数据。可以参考我之前的这篇文章,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)

image-20231225215537695

最后,可以选择导出为 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”公众号回复星巴克关键词获取。

相关推荐

  1. Python爬虫-批量Manner Coffee全国门店

    2023-12-29 07:42:01       17 阅读
  2. Pyhton爬虫实战京东商城的商品信息

    2023-12-29 07:42:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-29 07:42:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-29 07:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-29 07:42:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-29 07:42:01       20 阅读

热门阅读

  1. docker 部署 个人网页版 wps office

    2023-12-29 07:42:01       39 阅读
  2. 【Delphi 基础知识 3】每个单元的功能

    2023-12-29 07:42:01       38 阅读
  3. 【芯片DFX】Arm调试架构篇

    2023-12-29 07:42:01       33 阅读
  4. 微信小程序控制元素显示隐藏

    2023-12-29 07:42:01       35 阅读
  5. Mac电脑CMake安装和配置

    2023-12-29 07:42:01       40 阅读
  6. MySQL实战

    2023-12-29 07:42:01       34 阅读
  7. 为什么Python很糟糕

    2023-12-29 07:42:01       37 阅读
  8. .NET Core HttpClient请求异常分析

    2023-12-29 07:42:01       34 阅读