使用Python解析地址获取其所属省份

原理:主要是通过调用百度地图的开放接口,先通过输入具体地址调用获取地理编码接口(http://api.map.baidu.com/geocoding/v3/?ak=你申请的ak&output=json&address=地址)获取该地址的地理编码,得到经纬度,再通过逆地理编码服务接口(https://api.map.baidu.com/reverse_geocoding/v3/?ak=你申请的ak&output=json&location=经纬度数据) 将位置坐标解析成对应的行政区划数据以及周边高权重地标地点分布情况 ,对响应数据进行处理,最终得到地址所属省份。

1.申请百度地图ak
在这里插入图片描述

2.具体代码实现

import json
import sys

import requests

# 根据中文名地址获取经纬度地址
def getLocation(address):
    url = "http://api.map.baidu.com/geocoding/v3/?ak=你申请的ak&output=json&address="+address
    response = requests.get(url)
    if response.status_code == 200:
        responseBody = json.loads(response.text)
        if responseBody['status'] == 0:
            result = responseBody['result']
            location = result['location']
            lng = location['lng']
            lat = location['lat']
            return (str(lat)+ "," + str(lng))

# 根据经纬度地址获取所属省份
def getProvinceByLocation(location):
    url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=你申请的ak&output=json&location="+location
    response = requests.get(url)
    if response.status_code == 200:
        responseBody = json.loads(response.text)
        if responseBody['status'] == 0:
            result = responseBody['result']
            addressComponent = result['addressComponent']
            province = addressComponent['province']
            return province

with open("待解码数据.txt",'r',encoding='utf-8') as file,open("广东省内入境口岸.txt","a",encoding='utf-8') as guangDongFile,open("解析错误的入境口岸地址.txt","a",encoding='utf-8') as errorFile:
    lines = file.readlines()
    total = len(lines)
    index = 0
    for address in lines:
        address = address.rstrip('\n')
        try:
            province = getProvinceByLocation(getLocation(address))
            if '广东省' == province:
                guangDongFile.write(address)
                guangDongFile.write("\n")
        except:
            errorFile.write(address)
            errorFile.write("\n")

        percent = float(index) * 100 / float(total)
        index += 1
        sys.stdout.write("%.4f" % percent)
        sys.stdout.write("%\r")
        sys.stdout.flush()
    sys.stdout.write("100%\r")
    sys.stdout.flush()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值