利用百度普通IP定位API,坐标转换API进行IP定位

加载相关模块

import json
from urllib.request import urlopen

创建坐标列表,以便后续进行坐标提取

coords = []

创建坐标获取函数

def get_coordinate(ip_address):# 声明全局变量,以在函数中进行修改global coords# 利用ipstack提供的ip坐标查询API提取ip坐标数据# 语句.decode('utf-8')解码response = urlopen("http://api.ipstack.com/" + ip_address + "?access_key=这里是我的key")\.read().decode('utf-8')# 载入json格式的数据response_json = json.loads(response)# 将获得ip地址经纬度加入到coords列表中coords.append(response_json.get("latitude"))coords.append(response_json.get("longitude"))# 分别返回ip地址的经纬度值return coords[0], coords[1]

创建坐标转换函数(转换为百度坐标系)

转换结果看貌似并没有表面上的区别,但为保证运行结果更准确,故而转换
def switch_coordinate():# 通过百度提供的API服务文档提取坐标转换数据response = urlopen("http://api.map.baidu.com/geoconv/v1/?coords=" + str(coords[1]) +"," + str(coords[0]) + "&from=1&to=5&ak=这里是我的key").read().decode('utf-8')response_json = json.loads(response)# 返回转换结果return response_json.get("result")[0]['x'],\response_json.get("result")[0]['y']

创建ip地址获取函数

def get_location(ip_address):# 同样通过百度API服务文档提取相关数据response = urlopen("http://api.map.baidu.com/location/ip?ip=" + ip_address +"&ak=这里是我的key&coor=" + str(switch_coordinate()[0]) +"," + str(switch_coordinate()[1])).read().decode('utf-8')response_json = json.loads(response)address = response_json.get("content").get("address")city = response_json.get("content").get("address_detail")["city"]district = response_json.get("content").get("address_detail")["district"]province = response_json.get("content").get("address_detail")["province"]street = response_json.get("content").get("address_detail")["street"]street_number = response_json.get("content").get("address_detail")["street_number"]# 这里用个六个if判断语句,是为了让运行结果具有可读性,去掉无谓的标号if address != "":print("address:", address)if city != "":print("city:", city)if district != "":print("district", district)if province != "":print("province", province)if street != "":print("street", street)if street_number != "":print("street number:", street_number)

创建结果输出函数

def print_result(ip_address):print("原始坐标:", get_coordinate(ip_address))print("转换坐标:", switch_coordinate())print("\n————————Ip定位————————\n")get_location(ip_address)

运行函数

print_result(input("请输入IP地址:"))

完整代码如下:


import json
from urllib.request import urlopen
coords = []def get_coordinate(ip_address):global coordsresponse = urlopen("http://api.ipstack.com/" + ip_address + "?access_key=这里是我的key")\.read().decode('utf-8')response_json = json.loads(response)coords.append(response_json.get("latitude"))coords.append(response_json.get("longitude"))return coords[0], coords[1]def switch_coordinate():response = urlopen("http://api.map.baidu.com/geoconv/v1/?coords=" + str(coords[1]) + "," + str(coords[0]) +"&from=1&to=5&ak=这里是我的key").read().decode('utf-8')response_json = json.loads(response)return response_json.get("result")[0]['x'],\response_json.get("result")[0]['y']def get_location(ip_address):response = urlopen("http://api.map.baidu.com/location/ip?ip=" + ip_address +"&ak=这里是我的key&coor=" + str(switch_coordinate()[0]) +"," + str(switch_coordinate()[1])).read().decode('utf-8')response_json = json.loads(response)address = response_json.get("content").get("address")city = response_json.get("content").get("address_detail")["city"]district = response_json.get("content").get("address_detail")["district"]province = response_json.get("content").get("address_detail")["province"]street = response_json.get("content").get("address_detail")["street"]street_number = response_json.get("content").get("address_detail")["street_number"]if address != "":print("address:", address)if city != "":print("city:", city)if district != "":print("district", district)if province != "":print("province", province)if street != "":print("street", street)if street_number != "":print("street number:", street_number)def print_result(ip_address):print("原始坐标:", get_coordinate(ip_address))print("转换坐标:", switch_coordinate())print("\n————————Ip定位————————\n")get_location(ip_address)print_result(input("请输入IP地址:"))

我们以网络随机选取几个ip地址为例

运行结果如下:

后续希望通过深入的学习,能在此基础上优化,更能利用百度或者Google或者其他地理信息API数据提供商,根据经纬度显示出确切的地理位置。

Thanks!

【学习笔记】利用API进行数据采集或获取相关推荐

  1. sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)

    sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map) 这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之 ...

  2. ITK学习笔记(十二) SimpleITK获取二值图像bbox

    ITK学习笔记(十二) SimpleITK获取二值图像bbox sitk_ seg_ img = sitk . ReadImage( m ) bbox =get_ bbox_ from mask(si ...

  3. Sharepoint学习笔记—ECMAScript对象模型系列-- 7、获取和修改List的Lookup字段

    在前面我们提到了如何使用ECMAscript对象模型来操作普通的List Items,但如果我们操作的List包含有Lookup字段,那么我们又该怎么做呢? 首先参考此文搭建我们本文的测试环境 Sha ...

  4. Mr.J-- jQuery学习笔记(二十七)--DOM操作方法(删除获取文本)

    清除 <body> <button>调用remove</button> <div>我是div<p>我是段落</p> </d ...

  5. STM8学习笔记---利用UID码实现开机产生随机数

    有时候项目中需要用到开机产生随机数,而软件产生随机数必须要一个随机种子.随机种子的产生通常有下面几种方式: 用一路AD采集温度或电源噪声,取后几位作为随机信号: 将用户的交互信号时间作为随机信号: 利 ...

  6. java 反射api_Java学习笔记--反射API

    反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换. 按照 一般地面向对象的设计思路,一 ...

  7. FPGA学习笔记---利用连续赋值语句延时功能实现按键消抖

    最近一直在学习FPGA,今天在学习延时语句时,发现了连续赋值的一个特点.在连续赋值语句中添加延时时,任何小于延迟值的输入变化都会被滤除而不会体现在输出上.比如  #10 B = A; 当A的变化小于1 ...

  8. dx12 龙书第七章学习笔记 -- 利用Direct3D绘制几何体(续)

    1.帧资源 之前,我们在处理CPU和GPU的同步问题时,采取以下方法:在每帧绘制的结尾调用D3DApp::FlushCommandQueue函数,以确保GPU在每一帧都能正确完成所有命令的执行 这样做 ...

  9. 【Java学习笔记】API:线程

    线程API 线程的生命周期图 线程方法 run方法用于定义线程任务 interrupt方法用于中断线程 yield用于让出CPU时间 start方法用于启动线程 创建线程有两种方式 常见线程有两种方式 ...

  10. 机器学习之聚类学习笔记-利用python的sklearn实现

    学习来源 sklearn中文文档 聚类算法练习 python代码实现K-means算法 Python数模笔记-Sklearn(2)聚类分析 均值偏移聚类 K-means聚类算法 该算法可分为三个步骤. ...

最新文章

  1. 扯谈spring mvc之WebApplicationContext的继承关系
  2. 谈谈神秘的ES6——(一)初识ECMAScript
  3. MaxCompute安全管理指南-基础篇
  4. 利用Python自动发送电子邮件
  5. C语言三剑客之《C陷阱与缺陷》一书精华提炼
  6. 更改“我的文档”文件夹的默认位置
  7. notepad++ 技巧
  8. 基于Flink CDC打通数据实时入湖
  9. 2012中文字库简单统计与分类
  10. gif怎么转换html,gif转视频的教程:怎么把gif转换成mp4、avi、wmv
  11. 一梦江湖获取服务器信息一直获取不出来,一梦江湖手游4月10日更新汇总-一梦江湖手游4月10日更新内容有哪些_牛游戏网...
  12. 【IC验证】Questasim使用指导
  13. 乾隆的太医留下来的民间偏方
  14. Scipy 学习 第1篇:插补
  15. 【ESP 保姆级教程 预告】疯狂Node.js服务器篇 ——案例:ESP8266 + DS18B20温度传感器 +NodeJs本地服务+ MySQL数据库
  16. 10年后,程序员的薪资还会这么高么?
  17. Unity3d 坦克AI_自动寻怪,自动追击脚本参考
  18. 【麦肯锡系列阅读笔记】学会提问
  19. 三星三防s8计算机功能在哪里,三星Galaxy S8防水性能怎么样 三星S8防水介绍【图文详解】...
  20. oracle进入asm命令,Oracle常用ASM操作命令

热门文章

  1. VBA轻松实现多色渐变填充
  2. python中binomial_Python Numpy random.binomial() 二项分布
  3. 微信小程序注册流程详解
  4. 云主机被挖矿解决方法
  5. HAOI2017 八纵八横——线段树分治+线性基
  6. Duplicate Symbols for Architecture解决办法
  7. com.google.inject.ProvisionException: Guice provision errors问题解决
  8. fastreport 横向分栏_fastreport分栏分组显示问题(急贴盼解决)
  9. 【爬虫】巧用 js2py (附带bug解决)
  10. Identification和Verification的区别