You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python不借助Selenium及任何API爬取谷歌地图数据

仅使用requests与bs4实现谷歌地图数据爬取方案

方案约束

  • 技术栈仅使用requests、bs4(即beautifulsoup4)两个第三方库,无额外依赖
  • 完全排除Selenium、API类实现方案,排除依据:
    • Selenium运行速度慢,爬取过程内存占用高,无法满足轻量高效的爬取要求
    • 各类地图API方案成熟度较高,但使用成本高昂,不符合低成本爬取的需求

核心实现逻辑

谷歌地图前端初始加载时,会将POI、地点基础信息内嵌在页面的script标签中,无需执行JS即可直接解析提取,整体流程如下:

  1. 构造合法请求头模拟普通浏览器请求,绕过基础反爬校验,核心需要携带正常的User-Agent、Accept-Language字段,基础请求代码示例:
import requests
from bs4 import BeautifulSoup
import json

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}
# 替换为目标谷歌地图检索结果页URL
target_url = "对应谷歌地图搜索页面地址"
response = requests.get(target_url, headers=headers, timeout=10)
response.encoding = "utf-8"
  1. 通过bs4加载响应文本,定位存储地图初始数据的script标签:谷歌地图不会将初始渲染数据放在常规DOM节点中,而是存储在包含window.APP_INITIALIZATION_STATE字段的script标签内,遍历标签匹配特征即可定位:
soup = BeautifulSoup(response.text, "html.parser")
raw_data_script = ""
for script_tag in soup.find_all("script"):
    script_content = script_tag.string
    if script_content and "window.APP_INITIALIZATION_STATE" in script_content:
        raw_data_script = script_content
        break
  1. 对提取到的脚本内容做字符串处理,剥离JS赋值前缀、后缀语法,拿到合法JSON字符串后转成Python字典,即可按数据结构提取需要的地点名称、地址、评分、经纬度、联系方式等字段。

爬取注意事项

  • 控制请求频率在普通人工访问的区间,避免短时间高频请求触发IP封禁
  • 谷歌地图前端迭代时,存储数据的script标签特征可能出现小幅变动,若出现数据匹配失败的情况,对照最新页面源码调整匹配关键字即可,整体爬取逻辑无需改动

内容的提问来源于stack exchange,提问作者Uk Chi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:21:38