37

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

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

任何想法如何去做这件事?

4

8 回答 8

33

不幸的是,您不能从 Google Places API 获得超过 60 个结果;至少在不违反服务条款的情况下:

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

此外,您可以在此处阅读:

这在很大程度上是一个许可问题。但这也是因为 Places API 的目标不是以您描述的方式促进 Google Places 数据的抓取或聚合。任何这样做的应用程序几乎肯定不符合 Google Maps 或 Google Maps API 服务条款,并且可能随时被阻止使用 API 或其他 Google 服务。Places API 旨在允许应用程序为其用户提供一种发现附近地点的方法。用户将浏览并考虑的搜索结果的数量存在实际限制。我认为没有必要为用户提供 200 个结果,而且我怀疑这样做只会增加抓取 Google Places 数据的应用程序的开发,

作为进一步的参考,也看看这个答案

于 2012-12-30T21:51:26.183 回答
4

使用雷达搜索。在此处查看文档。

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

希望这可以帮助。

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

于 2013-07-25T19:59:14.107 回答
4

我前一阵子制作了这样一个工具https://github.com/Pithikos/Geoexplorer。你可以在这里看到它的样子。

我什至有一个使用 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 或更早版本,请阅读此处安装依赖项部分)。

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

于 2014-09-18T17:02:43.147 回答
2

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

于 2017-02-02T21:05:27.650 回答
2

我在谷歌地图搜索之上创建了爬虫,你可以在这个用例中使用它。你可以在这里查看爬虫。

于 2019-01-11T14:47:02.177 回答
0

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

于 2013-01-03T16:14:49.767 回答
0

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

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

于 2021-06-16T19:24:33.420 回答
0

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

要求:

  • 需要放置 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)
于 2021-08-09T04:53:31.407 回答