在Python中提取地址中的城市和邮政编码

0 投票
1 回答
3559 浏览
提问于 2025-04-18 18:51

我有一些地址字符串,像这样:

1234 Maple Ave. Queens, NY 11011

这些字符串的格式各不相同,所以我不能简单地用字符串解析或分割来处理。

有没有办法可以连接到谷歌地图或者其他的API,这样我就能查找地址,并把所有地址的组成部分分开给我?

理想情况下,我应该能够做一些像这样的事情:

>> address = "1234 Maple Ave. Queens, NY 11011"
>> data = maps_api.extract_data(address)
>> print data.house_number
>> 1234 Maple Ave. 
>> print data.city
>> Queens
>> print data.state
>> NY
>> print data.zip
>> 11011

1 个回答

2

这看起来非常适合 googlemaps api

import googlemaps
import pprint
gmaps = googlemaps.Client(<your-api-key>)
address = "1234 Maple Ave. Queens, NY 11011"

result = gmaps.geocode(address)
pprint.pprint(result)

这样做会产生:

[{'address_components': [{'long_name': 'Maple Avenue',
                          'short_name': 'Maple Ave',
                          'types': ['route']},
                         {'long_name': 'Queens',
                          'short_name': 'Queens',
                          'types': ['political',
                                    'sublocality',
                                    'sublocality_level_1']},
                         {'long_name': 'Queens County',
                          'short_name': 'Queens County',
                          'types': ['administrative_area_level_2',
                                    'political']},
                         {'long_name': 'New York',
                          'short_name': 'NY',
                          'types': ['administrative_area_level_1',
                                    'political']},
                         {'long_name': 'United States',
                          'short_name': 'US',
                          'types': ['country', 'political']},
                         {'long_name': '11355',
                          'short_name': '11355',
                          'types': ['postal_code']}],
  'formatted_address': 'Maple Ave, Queens, NY 11355, USA',
  'geometry': {'bounds': {'northeast': {'lat': 40.7568371, 'lng': -73.8257325},
                          'southwest': {'lat': 40.7532547, 'lng': -73.8356575}},
               'location': {'lat': 40.7545838, 'lng': -73.8304485},
               'location_type': 'GEOMETRIC_CENTER',
               'viewport': {'northeast': {'lat': 40.7568371,
                                          'lng': -73.8257325},
                            'southwest': {'lat': 40.7532547,
                                          'lng': -73.8356575}}},
  'partial_match': True,
  'place_id': 'ChIJsdNKew1gwokRxRSYip5FkAw',
  'types': ['route']}]

不过你需要一个api密钥:要获取这个密钥,可以按照 这些步骤进行操作。

另外,还有 pygeocoder 或者 geopy(这两个可以让你选择使用OpenStreetMap和Bing)。

撰写回答