python爬虫学习第十九天
来源:互联网 发布:java用户登录权限 编辑:程序博客网 时间:2024/06/04 18:47
今天的主题与API有关,这里的API仅仅指的是网络应用API
API使用
不同 API 的调用语法大不相同,但是有几条共同准则。当使用 GET 请求获取数据时,用 URL 路径描述你要获取的数据范围,查询参数可以作为过滤器或附加请求使用。 例如,下面这个虚拟的 API,可以获取 ID 是 1234 的用户在 2014 年 8 月份发表的所有博文: http://socialmediasite.com/users/1234/posts?from=08012014&to=08312014
有许多 API 会通过文件路径(path)的形式指定 API 版本、数据格式和其他属性。例如, 下面的链接会返回同样的结果,但是使用虚拟 API 的第四版,反馈数据为 JSON 格式: http://socialmediasite.com/api/v4/json/users/1234/posts?from=08012014&to=08312014
还有一些 API 会通过请求参数(request parameter)的形式指定数据格式和 API 版本: http://socialmediasite.com/users/1234/posts?format=json&from=08012014&to=08312014
书中给了几个典型公司的API实例,普遍都需要改公司的账户,我只有google账户,google API说实话也足够我用了
练习 1 geocodeAPI
用 Google 的 Geocode(地理位置信息)API 你可以在浏览器里实现一个简单的 GET 请求, 把街道地址(这里用的是 Boston Museum of Science,里面有 Science Park)解析成纬度和 经度:
https://maps.googleapis.com/maps/api/geocode/json?address=1+Science+Park+Boston+MA+ 02114&key=<你的API key>
结果输出了json格式的信息
这里调用API时候的地址格式其实是不标准的(有兴趣可以去看一下google官方文档的格式),但是Google对这方面做了很好的优化算法,厉害了。
练习2 用 Time zone(时区)API 获取任意经纬度的时区信息
下面的是google Time zone 的实例,原著因为版本问题代码现在已经是不能用了
https://maps.googleapis.com/maps/api/timezone/json?location=38.908133,-77.047119×tamp=1458000000&key=<你的API key>
练习3 用地点经纬度获取对应的海拔高度
下面的示例将请求科罗拉多州“里高城”丹佛的海拔高度,并以 JSON 格式返回
https://maps.googleapis.com/maps/api/elevation/json?locations=39.7391536,-104.9847034&key=<你的API key>
返回json格式的各种信息(主要是海拔)
{
“results” : [
{
“elevation” : 1608.637939453125,
“location” : {
“lat” : 39.7391536,
“lng” : -104.9847034
},
“resolution” : 4.771975994110107
}
],
“status” : “OK”
}
接下来有一些关于json解析的练习,对于json解析,python里有json模块可供使用
练习4 练习4 解析API传回的json
# import json# from urllib.request import urlopen# def getLocation(ipAddress):# response = urlopen('http://freegeoip.net/json/'+ipAddress).read().decode('utf-8')# getJson = json.loads(response)# return getJson.get('country_code')# print(getLocation('45.78.37.141'))
Python 使用了一种灵活的方式解析JSON,把 JSON 转换成字典,JSON 数组转换成列表, JSON 字符串转换成 Python 字符串。通过这种方式,就可以让 JSON 的获取和操作变得非 常简单。
练习5 json模块解析JSON的原理
# import json# jsonStrings = '''{# "arrayOfNums": [# {# "number": 0# }, # {# "number": 1# }, # {# "number": 2# }# ], # "arrayOfFruits": [# {# "fruit": "apple"# }, # {# "fruit": "banana"# }, # {# "fruit": "pear"# }# ]# }'''# jsonObj = json.loads(jsonStrings)# print(jsonObj.get('arrayOfNums'))# print(jsonObj.get('arrayOfFruits'))# print(jsonObj.get('arrayOfNums')[0])# print(jsonObj.get('arrayOfNums')[1].get('number'))
运行上面代码后可以得到下面的输出:
[{‘number’: 0}, {‘number’: 1}, {‘number’: 2}]
[{‘fruit’: ‘apple’}, {‘fruit’: ‘banana’}, {‘fruit’: ‘pear’}]
{‘number’: 0}
1
第一、二行输出是一个词典形式的列表,第三行是一个词典对象,第四行是一个字符串(这里为数),不难看出解析原理,有下级关键字的关键字都被解析成了列表对象,而内层的关键字被解析成字符串
今天到这里啦,打卡,休息~
- python爬虫学习第十九天
- 学习python的第十九天
- python爬虫学习第九天
- python爬虫学习第二十九天
- python爬虫学习第三十九天
- python爬虫学习第十天
- python爬虫学习第十五天
- python爬虫学习第十八天
- .net学习第十九天
- Java学习第十九天
- 第十九天学习笔记
- 第十九天学习记录
- Java学习第十九天
- 设计模式学习第十九天
- python学习---第九天
- 第十九天
- 黑马程序员--- 学习笔记(第十九天)
- 学习Unity3D第十九天之数据库。
- 网络协议篇之DHCP协议(一)—— DHCP协议基础
- CSU 1325 A very hard problem (莫比乌斯反演+分块求和优化)
- 前端知识体系
- PCB
- CleanMymac 4 激活码 Mac清理工具怎么样 好用吗
- python爬虫学习第十九天
- PHP中超全局变量$_SERVER
- 改造二叉树
- responseBody注解
- 瞎搞DP 改造二叉树
- leetcode Add to List 425. Word Squares
- 【javascript设计模式】1.Constructor(构造器)模式
- java 反射机制
- 南阳 oj119 线段树 区间最值