googlemaps api适用于python终端,但不适用于脚本

iggy12345

我试图用python编写一个简单的网络爬虫,该googlemaps爬虫使用api查找本地加油站,但是由于某些原因,我无法让它自己执行。当我单步执行代码或使用python提示符时,代码有效,但是当我尝试自行运行代码时,出现INVALID_REQUEST异常。

这是我的代码:

您需要一个api密钥来运行此程序,但是您可以在此处进行以下操作:https : //developers.google.com/places/web-service/get-api-key运行该应用程序需要花钱,但是Google会给您200美元月信用额度,因此您无需担心费用。就是说,我不是在这里粘贴我的东西供所有人使用。

import googlemaps
from googlemaps import places
import time

gmaps = googlemaps.Client(key='AnAPIKeyHere')


def find_stations() -> list:
  print("Collecting gas station data.")
  stations = []

  print('Collecting result data')
  time.sleep(2)
  search_result = places.places_nearby(gmaps, '42.144735,-93.534612', 160935, keyword='gas station')
  iter = 1
  while True:
    stations += search_result['results']
    if 'next_page_token' not in search_result:
      break
    else:
      iter += 1
      print("Collecting page {}".format(iter), end='\r')
      token = search_result['next_page_token']
      print("The token is: {}".format(token))
      search_result = places.places_nearby(gmaps, '42.144735,-93.534612', 160935, keyword='gas station',
                                           page_token=token)
      time.sleep(1)

  return stations


if __name__ == "__main__":
  for s in find_stations():
    print(s)

那里有很多停顿,我这样做是因为我想也许我对页面的请求太快了,但是它们似乎没有什么不同。我也尝试将gmaps声明移到函数调用中,但这也没有什么不同。

这是我得到的回溯错误:

Collecting gas station data.
Collecting result data
The token is: CrQCIgEAAF6QgiE83iz0sERAFSCJ2pAta_xnIID4DWdDIBcOnp89mZ_UWEkDbSRT5eRmGdj4fQ4kqnQAPzEdvsuzMhhAZzfJMbd6yH97aBvU6V1GRL-fVbS5d4yo-fAEcA-9WABaNneCzSp_JzHMdSa1qv7dKSn1d57ltnw_I9g2V6Lw0DHmGYATanhf9g8tbRT9qDbNNbmC3WSdr5nL0ZuPKB9xmx4Q5AISSYGy4gw_sqSsW7NyMPMCuKpZ0oOhl9bfN1nYnEwD_7SHegt1o7we2OBlYIRqGawcUHvxvabkYtCz9G0flxOckzNqNh3PD1jIBmr4xM1AwBvjxmDxbJudsw9evsXrzIqIoewYInh9sz-DbyGnb_N8f9TXN4xU9ljXve-Zz96YXWWQwh_yM8LGhd5elHMSEBUWS3IRS9S59Rd9deU7ZpQaFIYdprNd8Ysj-xbA9cKPkmhdI80D
Traceback (most recent call last):
  File "/home/aaron/Workspace/projects/gas_webscraper/maps_test.py", line 32, in <module>
    for s in find_stations():
  File "/home/aaron/Workspace/projects/gas_webscraper/maps_test.py", line 25, in find_stations
    page_token=token)
  File "/home/aaron/anaconda3/envs/webscraping/lib/python3.7/site-packages/googlemaps/places.py", line 144, in places_nearby
    rank_by=rank_by, type=type, page_token=page_token)
  File "/home/aaron/anaconda3/envs/webscraping/lib/python3.7/site-packages/googlemaps/places.py", line 235, in _places
    return client._request(url, params)
  File "/home/aaron/anaconda3/envs/webscraping/lib/python3.7/site-packages/googlemaps/client.py", line 253, in _request
    result = self._get_body(response)
  File "/home/aaron/anaconda3/envs/webscraping/lib/python3.7/site-packages/googlemaps/client.py", line 282, in _get_body
    raise googlemaps.exceptions.ApiError(api_status)
googlemaps.exceptions.ApiError: INVALID_REQUEST

我今天才开始看这个api,因此我对此还很陌生,并且一直努力在python客户端上找不到任何真实的文档,因此不胜感激。

先生先生

文档中

next_page_token发出a与生效之间存在短暂的延迟在下一页可用之前请求下一页将返回INVALID_REQUEST响应。使用相同的请求重试next_page_token将返回结果的下一页。

换句话说,您需要稍等片刻才能请求下一页。您可以在用户输入上加载下一个结果,或者只是延迟其他请求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

适用于Localhost的Googlemaps API密钥

适用于Android的googleMaps API

适用于 PHP 但不适用于脚本

docker 子域 api.localhost 适用于 chrome 但不适用于终端

PHP 文件上传适用于 HTTP 表单,但不适用于 Python 脚本

适用于Android的GoogleMaps v2:渲染地图时无法删除标记

环境适用于终端 phython 解释器,但不适用于 PyCharm

导入声明适用于PyCharm,但不适用于终端

函数适用于命令行,但不适用于脚本

@reboot适用于命令,但不适用于脚本-Cron

脚本适用于文件输入,但不适用于stdin

SQL脚本适用于SQL Fiddle,但不适用于MS SQL Server 2014

Perl 命令适用于命令行,但不适用于 bash 脚本

Expect 脚本中的 scp 适用于少数文件但不适用于许多文件

me.level 适用于提示但不适用于脚本

Js 脚本适用于桌面,但不适用于移动设备

Lua MQTT发布不适用于脚本,但适用于ESP8266上的终端

intent.getParcelableExtra()适用于API 23,但不适用于API 25

AllowAnyMethod适用于某些API调用,但不适用于其他API调用

Android:代码适用于 api 19 但不适用于 api 24

适用于Python 2但不适用于Python 3的Python子进程PIPE

React Native HTTPS Api 调用适用于 IOS,但不适用于 Android

进度条适用于Android API 23,但不适用于21或22

API适用于Postman,但不适用于浏览器

Particle Photon API:获取客户令牌适用于 Postman 但不适用于 axios

对Web-api的ajax调用适用于GET,但不适用于POST

向api发送请求适用于Android,但不适用于IOS。Xamarin

API 请求适用于 cURL 但不适用于 Guzzle?

API适用于Java应用程序,但不适用于JavaFX