Ошибка при использовании библиотеки geopy - PullRequest
0 голосов
/ 25 апреля 2018

У меня следующий вопрос, я хочу настроить подпрограмму для выполнения итераций внутри кадра данных (панд) для извлечения данных долготы и широты после предоставления адреса с помощью библиотеки 'geopy'.

подпрограмма, которую я создал, была:

import time
from geopy.geocoders import GoogleV3
import os

arquivo = pd.ExcelFile('path')
df = arquivo.parse("Table1")

def set_proxy():
    proxy_addr = 'http://{user}:{passwd}@{address}:{port}'.format(
        user='usuario', passwd='senha', 
        address='IP', port=int('PORTA'))
    os.environ['http_proxy'] = proxy_addr
    os.environ['https_proxy'] = proxy_addr

def unset_proxy():
    os.environ.pop('http_proxy')
    os.environ.pop('https_proxy')

set_proxy()

geo_keys = ['AIzaSyBXkATWIrQyNX6T-VRa2gRmC9dJRoqzss0'] # API Google
geolocator = GoogleV3(api_key=geo_keys )

for index, row in df.iterrows():
    location = geolocator.geocode(row['NO_LOGRADOURO'])
    time.sleep(2)
    lat=location.latitude
    lon=location.longitude
    timeout=10)
    address = location.address
    unset_proxy()
    print(str(lat) + ', ' + str(lon))

Проблема, с которой я столкнулся, заключается в том, что при запуске кода выдается следующая ошибка:

GeocoderQueryError: Ваш запрос был отклонен.

Я попытался создать, не передав ключ в API Google, однако получаю следующее сообщение:

KeyError: 'http_proxy'

и если я удаляю оператор unset_proxy () из for, я получаю следующее сообщение:

GeocoderQuotaExceeded: данный ключ превысил лимит запросов за 24 часа или отправилслишком много запросов за слишком короткий промежуток времени.

Но я сделал только 5 запросов сегодня, и я помещаю 2-секундный сон между запросами.Должен ли период быть длиннее?

Есть идеи?

1 Ответ

0 голосов
/ 26 апреля 2018
  1. api_key аргумент класса GoogleV3 должен быть строкой, а не списком строк (это причина вашей первой проблемы).
  2. geopy не гарантируетhttp_proxy / https_proxy переменные, которые необходимо соблюдать (особенно изменения во время выполнения os.environ).Рекомендуемое ( by docs ) использование прокси-серверов:

    geolocator = GoogleV3(proxies={'http': proxy_addr, 'https': proxy_addr})
    

PS: Пожалуйста, никогда не публикуйте свои ключи API в открытом доступе.Я предлагаю отозвать ключ, который вы опубликовали в вопросе, и сгенерировать новый, чтобы предотвратить возможность злоупотребления им кем-либо еще.

...