如何根据具体地址获取经纬度

根据具体地址获取经纬度

背景:在爬虫实战中 https://editor.csdn.net/md/?articleId=93904502 ,关于地图展示部分,有些地址没有在地图上展示,这是由于excel不能识别具体地址的物理位置,故需要根据经纬度获取具体地址的位置。好想把最后的可视化地图送给买房的盆友们 ***—***
汤臣一品不是梦*–*
也就20多万一平吧

言归正传~

通过python调用高德地图接口,返回经纬度
代码如下:

import xlrd
import requests
import json

# 设置路径
path = './lj_distinct_data_analysis.xlsx'
# 打开execl
workbook = xlrd.open_workbook(path)

# 输出Excel文件中所有sheet的名字
print(workbook.sheet_names())

# 根据sheet索引或者名称获取sheet内容
Data_sheet = workbook.sheets()[0]  # 通过索引获取
colNum = Data_sheet.ncols  # sheet列数
rowNum = Data_sheet.nrows  # sheet行数

cols = Data_sheet.col_values(colNum - 1)  # 获取最后一列内容
print(cols)
address_all = []
url = "https://restapi.amap.com/v3/geocode/geo"
if rowNum > 2:
    # 循环地址
    count = 1
    address = ''
    for rowCount in range(1, rowNum):
        # 10次请求或者是最后一次请求未满10if (count % 10 == 0 or count == rowNum):
            if (address == ''):
                address += cols[rowCount] # address 首地址不能有‘|else:
                address += '|' + cols[rowCount]
            # 参数 
            content = {'key': '********************', 'address': address, 'batch': 'true'}
            # print(content)
            # get 请求
            response = requests.get(url, params=content)
            # 字符串转json
            json_obj = json.loads(response.text)
            # {
            #     "status": "1",
            #     "info": "OK",
            #     "infocode": "10000",
            #     "count": "1",
            #     "geocodes": [
            #         {
            #             "formatted_address": "北京市朝阳区阜通东大街|6号",
            #             "country": "中国",
            #             "province": "北京市",
            #             "citycode": "010",
            #             "city": "北京市",
            #             "district": "朝阳区",
            #             "township": [],
            #             "neighborhood": {
            #                 "name": [],
            #                 "type": []
            #             },
            #             "building": {
            #                 "name": [],
            #                 "type": []
            #             },
            #             "adcode": "110105",
            #             "street": "阜通东大街",
            #            "number": "6号",
            #             "location": "116.483038,39.990633",
            #             "level": "门牌号"
            #        }
            #     ]
            # }
            # 获取到listObject
            geocodes = json_obj.get('geocodes')
            if geocodes is not None:
                for obj in geocodes:
                    # 获取到list的 第一个中location的值
                    addressAndLocation = obj.get('formatted_address') + ":" + obj.get('location')
                    print(addressAndLocation)
                    if addressAndLocation is not None:
                        address_all.append(addressAndLocation)
            address = '' # 10次之后重新初始化
        else:
            if (address == ''):
                address += cols[rowCount]
            else:
                address += '|' + cols[rowCount]
        count += 1
    print(len(address_all))
    
import pandas as pd 
address_all = pd.Series(address_all) 
address_all = address_all.str.split(r':',expand = True)
address = address_all[0]

jingweidu = address_all[1].str.split(r',',expand = True)

name ={n:v for n,v in zip([0,1],['经度','纬度'])}
jingweidu.rename(columns=name,inplace=True)
dizhi = pd.concat([address,jingweidu],axis=1)
dizhi.rename(columns={0:'addr'},inplace=True)
dizhi.head()
#保存到execl
dizhi.to_excel(r'.\经纬度返回.xlsx')

最后展示的效果图:
经纬度获取具体地址

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值