第一部分:地域维度标准化

泪湿孤枕 提交于 2020-03-12 22:23:22

正在更新数据库,但是今日限额到了,api接口不能用了,数据表只更新了一半。

期间遇到了很多问题,经过问同学,和查资料解决了。

上一篇博客的获取单个地址比较好用,批量获取的时候就不太行了。

这是地域与行政代码的截图:

 

 

 主要代码:

获取经纬度:

def JingWei(address):
    global lat, lng
    # 产生sn码
    queryStr = "/geocoding/v3/?address=" + address + '&output=json&ak=' + MyAK
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    rawStr = encodedStr + MySK
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())

    # 生成url
    url = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")
    #print('Retrieving', url)

    # 从API读取数据
    uh = urllib.request.urlopen(url)
    data = uh.read().decode()
    # print('Retrieved', len(data), 'characters')
    # 解析数据
    try:
        js = json.loads(data)
    except:
        js = None
    try:
        if not js or 'status' not in js or js['status'] != 0:
            print('======Failure====')
            print(data)

    # print(json.dumps(js, indent=4, ensure_ascii=False))

        # 获取经纬度坐标和地址类型
        lat = js["result"]["location"]["lat"]
        lng = js["result"]["location"]["lng"]
        #print('纬度', lat, '经度', lng)
        level = js["result"]["level"]
        #print('地址类型', level)
    except:
        pass
View Code

逆向解析:

def getlocation(lat, lng):
    url = '/reverse_geocoding/v3/?ak=' + MyAK + '&output=json&coordtype=wgs84ll&location=' + str(lat) + ',' + str(lng)
    encodedStr = urllib.parse.quote(url, safe="/:=&?#+!$,;'@()*[]")
    rawStr = encodedStr + MySK
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    # 生成url
    url = urllib.parse.quote("http://api.map.baidu.com" + url + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[ ]")
    # print('Retrieving', url)
    req = urllib.request.urlopen(url)  # json格式的返回数据
    res = req.read().decode("utf-8")  # 将其他编码的字符串解码成unicode
    #print(json.loads(res))
    return json.loads(res)
View Code
def jsonFormat(addr,lat, lng):
    print(addr)
    str = getlocation(lat, lng)
    global dictjson
    dictjson = {}
    # get()获取json里面的数据
    jsonResult = str.get('result')
    address = jsonResult.get('addressComponent')
    # 国家
    country = address.get('country')
    # 国家编号(0:中国)
    country_code = address.get('country_code')
    # 省
    province = address.get('province')
    # 城市
    city = address.get('city')
    # 城市等级
    city_level = address.get('city_level')
    # 县级
    district = address.get('district')
    # 区划代码
    adcode = address.get('adcode')
    # 街道
    street = address.get('street')
    # 街道编号
    street_number = address.get('street_number')
    # 把获取到的值,添加到字典里(添加)
    # dictjson['country']=country
    # dictjson['country_code'] = country_code
   # dictjson['province'] = province + city + district + street + street_number
    #dictjson['province'] = province + city + district
    #dictjson['adcode'] = adcode
    province=province + city + district
    db.update_db(addr,'地域',province)
    db.update_db(addr, '行政代码', adcode)
   # with open('D:\\workspace\\pycharm\\region\\adcode.json', 'a',encoding='utf-8') as f:
        #json.dump(dictjson, f,ensure_ascii=False)
    try:
        conn = connect(host='localhost', port=3306, database='kettle',
                   user='root',
                   password='1234', charset='utf8')
        cs = conn.cursor()
        sql = "update exam12 set 地域='"+province+"' where 完成单位='"+addr+"'"
        cs.execute(sql)
    except:
        pass

    #return dictjson
    # dictjson['city_level'] = city_level
    # dictjson['district']=district
View Code

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!