【问题标题】:How to get all places (or specific type of place such as a restaurant) in a city or country with Google Places API?如何使用 Google Places API 获取城市或国家/地区的所有地点(或特定类型的地点,例如餐厅)?
【发布时间】:2025-12-22 15:20:08
【问题描述】:

我正在尝试查找所有“餐馆”或“保险公司”,例如,在一个城市或国家/地区。好吧,也许一个国家太宽泛,但主要是大城市。

我正在使用 Google Places API 和 python,但我发现您只能使用“radius”参数或“rankby=distance”。问题是,根据文档,我相信每个查询只能在 3 页上返回 20 个结果,或者 60 个结果(如果我错了,请纠正我)。因此,例如,如果我想查找纽约的所有餐馆,我必须从中心或其他地方开始并设置“rankby=distance”,以便它可以在设定的半径内为我提供 60 个最接近的结果。但是我不知道我的下一个查询会是什么......

任何想法如何去做?

【问题讨论】:

    标签: google-places-api


    【解决方案1】:

    很遗憾,您无法从 Google Places API 获得超过 60 个结果;至少在不违反服务条款的情况下:

    除非您事先收到书面 来自 Google 的授权(或,如适用,来自 特定内容),您不得: (d) 以某种方式使用产品 这使您或任何其他人可以访问大量下载或批量 任何内容的提要,包括但不限于数字纬度 或经度坐标、图像和可见地图数据

    此外,您可以阅读here:

    这在很大程度上是许可问题。但这也是因为目标 Places API 的目的不是为了方便抓取或聚合 以您描述的方式显示 Google 地方信息。任何应用程序 所以几乎可以肯定不符合谷歌地图或谷歌 Maps API 服务条款,并且可能会被阻止使用 API 或其他 Google 服务随时可用。 Places API 旨在 允许应用程序为其用户提供一种发现身份的方式 附近的地方。搜索次数有实际限制 用户将浏览并考虑的结果。我不相信 有必要为用户提供 200 个结果,我怀疑这样做 只会有助于增加抓取应用程序的开发 Google Places 数据,不会增加显着的好处或实用性 API 旨在服务的应用类型,以及我们希望提供的应用类型 鼓励。

    作为进一步的参考,请查看this answer

    【讨论】:

      【解决方案2】:

      我不久前做了这样一个工具https://github.com/Pithikos/Geoexplorer。你可以看到here它的样子。

      我什至有一个关于 Google Places 的工作示例,如果您有 API 密钥,您可以使用它。

      1. git clone https://github.com/Pithikos/Geoexplorer.git
      2. 在文件 examples/google_radar_search.py​​ 中添加您的 API 密钥
      3. python3 examples/google_radar_search.py
      4. 在浏览器中打开 GUI/index.html

      这将在瑞典的一个大区域内寻找名为“ICA”的杂货。您可以在 config.py 中配置要扫描的区域,在 google_radar_search.py​​ 中配置您的搜索查询。

      这应该可以在 13.10 之后的任何 Ubuntu 上正常运行。如果您使用 Windows 或更早版本,请阅读 here安装依赖项部分)。

      您还可以使用 API 添加您喜欢的任何其他服务。请记住,在使用时不要违反 Google 或任何其他公司的政策。我这样做只是为了在决定使用哪种服务之前测试哪种服务会给我带来最好的结果。

      【讨论】:

      • 这是否适合在某个国家/地区获取所有类型的所有业务?雷达搜索不再存在,所以我们只剩下附近的搜索。但是,这只返回最多 60 个结果,因此如果您检索特定半径的 60 个结果,则您的算法需要随后连续钻取到较小的半径,直到您检索的结果
      【解决方案3】:

      使用雷达搜索。检查文档here

      您可以一次性获得 200 个结果,但您的配额需要 5 个请求。与附近搜索相比,结果的详细信息较少,但您始终可以通过使用地点详细信息搜索来获得。

      希望这会有所帮助。

      注意:雷达搜索自 2018 年 6 月 30 日起已弃用。此后 时间,此功能将不再可用。

      【讨论】:

        【解决方案4】:

        不幸的是,Google 不希望人们能够做到这一点,因此他们设计了自己的 API 来阻止人们做这样的事情。然而,还有其他选择。如果你想通过 API 访问做到这一点,Factual 是领导者;他们在 50 个国家/地区拥有 1.02 亿个条目。

        【讨论】:

          【解决方案5】:

          我在 Google 地图搜索之上创建了爬虫,您可以将它用于此用例。可以查看爬虫here

          【讨论】:

            【解决方案6】:

            根据我的理解..我们建议在我的场景中使用交叉 api 引用,将使用嵌套的异步 WCF 调用除以谷歌规定的有限调用

            【讨论】:

              【解决方案7】:

              您可以使用 SerpApi 等第三方解决方案。这是一个免费试用的付费 API。我们为您处理代理、解决验证码并解析所有丰富的结构化数据。

              我们提供用于抓取完整的Google Places 结果以及Google Maps 结果的 API。

              【讨论】:

                【解决方案8】:

                在 URL 中使用 Page 令牌,您可以获得所有结果。

                要求:

                • 需要放置 API 密钥。
                • 安装请求库。

                你可以试试下面的代码:

                import requests
                import json
                
                final_data = []
                
                location='24.4165267,75.833981'
                radius='2000'
                types='restaurant'
                url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=%s&radius=%s&types=%s&key=api key" % (location,radius,types)
                
                while True:
                
                    response = requests.request("POST", URL)
                    response = json.loads(response.text)
                    results = response['results']
                
                    for result in results:
                       final_data.append(data)
                
                    if 'next_page_token' not in response:
                        break
                    else:
                        next_page_token = response['next_page_token']
                
                    next_page_token = '&pagetoken=%s' % str(next_page_token)
                    url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=%s&radius=%s&types=%s&key=api key%s" % (location,radius,types,next_page_token)
                
                print(final_data)
                

                【讨论】: