侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python调用百度地图WEB服务API获取地点对应坐标值

Python  /  管理员 发布于 7年前   121

本篇博客介绍如何使用Python调用百度地图WEB服务API获取地点对应坐标值,现有一系列结构化地址数据(如:北京市海淀区上地十街十号),目的是获取对应坐标值。

百度地图开发者平台路线规划使用说明网址

最终结果是写入了txt文件,所以需要在循环遇到错误的时候写入对应的可识别的值(看到这个值就知道这个结果是错误的,可以写对应数量的NA或者0值),方便后续分析。

# -*- coding: utf-8 -*-"""Created on Fri Aug 15 10:06:16 2018@author: zjpPython3.6.6""" # 加载必要的包 import csvimport jsonimport timeimport requestsfrom bs4 import BeautifulSoup origin_path = 'E://GetRoute/HuaNan/中文地址.csv' # 原始数据文件路径new_path = 'E://GetRoute/HuaNan/地址对应坐标.txt'  # 爬取数据文件保存路径  url_geocode = r'http://api.map.baidu.com/geocoder/v2/?' # 百度地图api网址AK = ['oFCSeioUzdN5NfzSlBBXqBEfXgp26mGM', 'Akqk5xjbSGzy1WC1IUF04K2CQWGtOFNv', 'HCdq1Ry35rwgVQwjAXqAEQGzWNY7pi1h',  'GtOZERwlG0PynPwFrBYaF9wWcAGxvaw8', 'iRKkZehZimIWdGoxfjlbtLrYb0VVgVaD', 'gG0KIBhAGpAVvaRUlwFjmOtsTKGRK2tf',  'CSsyosiklqyYUDNnBP0BR63fa9BzCHFf', 'mq4TZshHveVqML3icCC6AWnS25rbjYBz', 'rBYetA6WQNOlXtQWInz8ckRE0iCDsUjB',  'QUshHD8KUAk8y9gLwDhQ6RyOgQxEB8VD', '7Ict6oZmpAYYXMjha2Tk5g4ENTCYwx03'] # 开发者应用密钥cod = r'&ret_coordtype=bd09ll' # 坐标类型(设置为百度坐标)machine_data = csv.reader(open(origin_path, 'r', encoding='utf-8')) # 读取原始文件数据n = 0akn = 0column_names = '设备序列号 取点方式1 准确度1 网点纬度 网点经度 网点名称 取点方式2 准确度2 安装地址纬度 安装地址经度 安装地址 取点 准确度 最佳纬度 最佳经度 安装方式 最佳地址'with open(new_path, 'a', encoding='utf-8') as f: # 把变量名写入新文件 f.write(column_names) f.write('\n') f.close()while True: try:  for addr in machine_data: # 循环爬取每一条数据   province = str(addr[0]) # 省份   city = str(addr[1]) # 城市   mac = str(addr[2])  # 设备序列号   wd = str(addr[3])  # 网点名称   anz = str(addr[4])  # 安装地址   anz_type = str(addr[5]) # 安装类型   add1 = province + city + wd   add2 = province + city + anz   if akn < len(AK): # AK配额还没用完时    n += 1    aknd = AK[akn] # 第akn个秘钥是aknd    ak = r'&output=json&ak=' + aknd    address1 = r'address=' + add1    tar_url = url_geocode + address1 + ak + cod # 最终url网址    response = requests.get(url=tar_url) # 请求网址响应    soup = BeautifulSoup(response.content, 'html.parser') # 解析网页内容    response.close() # 获取内容后关闭网页(防止被远程主机认定为攻击行为)    dictinfo = json.loads(str(soup)) # json数据转dict数据    status = dictinfo['status']    print(status)    if status == 0: # status状态码为0表示服务器响应成功,本次循环爬取数据成功     lng1 = round(dictinfo['result']['location']['lng'], 8) # 经度保留8位数     lat1 = round(dictinfo['result']['location']['lat'], 8) # 纬度保留8位数     precise1 = dictinfo['result']['precise'] # 1为精准打点,可靠性高;0为模糊打点,准确性低     confidence1 = dictinfo['result']['confidence'] # 可信度,描述打点准确度,大于80表示误差小于100m     geocode1 = str(precise1) + ' ' + str(confidence1) + ' ' + str(lat1) + ' ' + str(lng1) + ' ' + add1    elif status == 302 or status == 210: # 302 配额超限,限制访问;210 IP验证未通过,则使用下一个Ak     akn += 1     lat1 = 'break'     lng1 = 'break'     precise1 = 0     confidence1 = 0     geocode1 = '0 0 break break ' + add1    else:     lat1 = 'na'     lng1 = 'na'     precise1 = 0     confidence1 = 0     geocode1 = '0 0 na na ' + add1    address2 = r'address=' + add2    tar_url2 = url_geocode + address2 + ak + cod # 总的url    response2 = requests.get(url=tar_url2) # 请求网址响应    soup2 = BeautifulSoup(response2.content, 'html.parser') # 解析内容    response2.close() # 获取内容后关闭网页(防止被远程主机认定为攻击行为)    dictinfo2 = json.loads(str(soup2)) # json转dict    status2 = dictinfo2['status']    print(status2)    if status2 == 0:     lng2 = round(dictinfo2['result']['location']['lng'], 8) # 经度保留8位数     lat2 = round(dictinfo2['result']['location']['lat'], 8) # 纬度保留8位数     precise2 = dictinfo2['result']['precise'] # 1为精准打点,可靠性高;0为模糊打点,准确性低     confidence2 = dictinfo2['result']['confidence'] # 可信度,描述打点准确度,大于80表示误差小于100m     geocode2 = str(precise2) + ' ' + str(confidence2) + ' ' + str(lat2) + ' ' + str(lng2) + ' ' + add2    elif status2 == 302 or status2 == 210: # 配额超限,限制访问;IP验证未通过     akn += 1     precise2 = 0     confidence2 = 0     lat2 = 'break'     lng2 = 'break'     geocode2 = '0 0 break break ' + add2    else:     lat2 = 'na'     lng2 = 'na'     precise2 = 0     confidence2 = 0     geocode2 = '0 0 na na ' + add2    if anz_type == '在行':     if precise1 == 1:      geocode3 = str(precise1) + ' ' + str(confidence1) + ' ' + str(lat1) + ' ' + str(lng1) + ' ' + anz_type + ' 网点'     elif precise1 == 0 and precise2 == 0:      geocode3 = str(precise1) + ' ' + str(confidence1) + ' ' + str(lat1) + ' ' + str(lng1) + ' ' + anz_type + ' 网点'     else:      geocode3 = str(precise2) + ' ' + str(confidence2) + ' ' + str(lat2) + ' ' + str(lng2) + ' ' + anz_type + ' 安装地址'    else:     geocode3 = str(precise2) + ' ' + str(confidence2) + ' ' + str(lat2) + ' ' + str(lng2) + ' ' + anz_type + ' 安装地址'    geocode = mac + ' ' + geocode1 + ' ' + geocode2 + ' ' + geocode3    with open(new_path, 'a', encoding='utf-8') as f:     f.write(geocode)     f.write('\n')     f.close()    print('good' + str(n))   else:    print('配额不足!')    break # 配额不足中断整个循环  print('已完成') except: # 发生错误时执行以下代码块  print('未知错误')  time.sleep(5)  with open(new_path, 'a', encoding='utf-8') as f:   f.write('未知错误')   f.write('\n')   f.close()  continue # 发生未知错误跳过该次循环 print('程序已停止') break

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    python游戏地图最短路径求解
    下一条:
    Python3 关于pycharm自动导入包快捷设置的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客