2017-03-06 84 views
1

我正在尋找可以幫助我從地址獲取國家的python包。Python包:獲取基於地址的國家(非ip)

我用pycountry,但如果我在地址的國家,我只能用,但我不知道,做什麼,如果我有恩:

「喬治城,TX」,「聖達菲,新墨西哥州「,」紐倫堡「,」Haarbergstr。67 D-99097愛爾福特「。

我不知道該怎麼辦,當我沒有國家的地址,並沒有明確的模式。

回答

3

似乎geopy可以做到這一點比較容易。從documentation採用的示例:

>>> import geopy 
>>> from geopy.geocoders import Nominatim 
>>> gl = Nominatim() 
>>> l = gl.geocode("Georgetown, TX") 
    # now we have l = Location((30.671598, -97.6550065012, 0.0)) 
>>> l.address 
[u'Georgetown', u' Williamson County', u' Texas', u' United States of America'] 
# split that address on commas into a list, and get the last item (i.e. the country) 
>>> l.address.split(',')[-1] 
u' United States of America' 

我們知道了!現在,測試它的其它位置

>>> l = gl.geocode("Santa Fe, New Mexico") 
l.address.split(',')[-1] 
u' United States of America' 
>>> l = gl.geocode("Nuremberg") 
>>> l.address.split(',')[-1] 
u' Deutschland' 
>>> l = gl.geocode("Haarbergstr. 67 D-99097 Erfurt") 
>>> l.address.split(',')[-1] 
u' Europe' 

所以,你可以在腳本中自動列表:

import geopy 
from geopy.geocoders import Nominatim 

geolocator = Nominatim() 

list_of_locations = "Georgetown, TX" , "Santa Fe, New Mexico", "Nuremberg", "Haarbergstr. 67 D-99097 Erfurt" 

for loc in list_of_locations: 
    location = geolocator.geocode(loc) 
    fulladdress = location.address 
    country = fulladdress.split(',')[-1] 
    print '{loc}: {country}'.format(loc=loc, country=country) 

輸出:

Georgetown, TX: United States of America 
Santa Fe, New Mexico: United States of America 
Nuremberg: Deutschland 
Haarbergstr. 67 D-99097 Erfurt: Europe 

希望這有助於。

+0

geopy在大多數情況下不起作用,例如寬度:「A.J. Tuck Co. Brookfield,Ct United States 06804-1814」。肯定是和美國的地址,但結果是沒有;這是工作,如果我刪除公司名稱和編號,但它並沒有幫助我,因爲我沒有一個清晰的模式,如公司名稱從地址 – user3541631

+0

刪除字符串例如,已經在國家的字符串,可以你只是從字符串中提取國家?使用字符串分析,或正則表達式? – davedwards

+0

1)是的,但這意味着我必須建立自己的國家名單及其名稱變體; - 我可以使用pycountry,但是 - > 2)如果我刪除國家形式的字符串,我也會收到沒有,所以1)不是主要問題,僅僅是一個例子; 3)與包裝本身無關,而是與服務有關的問題 - 我嘗試了更多的包裝,每個包裝都有不同的問題,並針對國家使用不同的名稱,所以回收更難; 4)Nominatim作爲響應時間最好,GoogleV3和雅虎收到了很多超時時間。 – user3541631