我是一个相对较新的Python用户,正在尝试使用geopy模块返回城市和国家的纬度和经度。我犯了错误,因为我的城市拼错了,我设法抓住了。我现在遇到的问题是遇到超时错误。我已经阅读了这个问题Geopy: catch timeout error,并相应地调整了超时参数。 不过,在我收到超时错误之前,它现在会运行不同的时间长度。我试过在更快的网络上运行它,它在某种程度上起作用。问题是,我需要对100k行执行此操作,并且在超时之前它迭代的最大行数是20k。非常感谢您提供任何有关如何解决此问题的帮助/建议。
import os
from geopy.geocoders import Nominatim
os.getcwd() #check current working directory
os.chdir("C:\Users\Philip\Documents\HDSDA1\Project\Global Terrorism Database")
#import file as a csv
import csv
gtd=open("gtd_original.csv","r")
csv_f=csv.reader(gtd)
outf=open("r_ready.csv","wb")
writer=csv.writer(outf,dialect='excel')
for row in csv_f:
if row[13] in ("","NA") or row[14] in ("","NA"):
lookup = row[12] + "," + row[8] # creates a city,country
geolocator = Nominatim()
location = geolocator.geocode(lookup, timeout = None) #looks up the city/country on maps
try:
location.latitude
except:
lookup = row[8]
location = geolocator.geocode(lookup)
row[13] = location.latitude
row[14] = location.longitude
writer.writerow(row)
gtd.close()
outf.close()
我希望您超出了nomingm服务(http://wiki.openstreetmap.org/wiki/Nominatim_usage_policy)的使用策略。试着在请求和缓存之间放置1秒的睡眠结果,很可能是很多重复的。
睡眠部分:
缓存:
更新
性能:1请求/秒-->;3600请求/小时-->;36K请求/10h
你可以使用GeocoderTimedOut
下面是一个示例函数,它可以帮助您
很简单,如果发生超时,它将重试。希望有帮助
相关问题 更多 >
编程相关推荐