Python网络数据采集之使用API|第03天
本节比较简单,有开发经验可以跳过。
使用API
API概述
百度百科关于API
的解释:API
(Application Programming Interface
,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
说明这就是接口,不受其语言的限制都可以调用。
API通用规则
API
用一套非常标准的规则生成数据,而且生成的数据也是按照非常标准的方式组织的。
方法
利用HTTP
请求网络服务器信息的方法有很多种,这里举例常用的四种:
GET
:从服务器获取数据的方法;
POST
:向服务器发送数据。例如提交表单到服务器处理的逻辑;
PUT
:主要用来更新一个对象或信息,一般很少用到;
DELETE
:从服务器删除一个对象。
验证
API
并不是随时或者谁都可以调用的。为了保证服务器上的安全或者减少资源等目的,我们会对请求的方法或者次数有限制。通常情况会对接口进行验证,一般的验证方法是令牌(token
),这个令牌一般是用户登录或者注册的时候从服务器生成然后给用户。令牌可以是可变的,也可以是不可变的。令牌除了在 URL
链接中传递,还会通过请求头里的 cookie
把用户信息传递给服务器。
简单示例:
token = "<your api key>"
webRequest = urllib.request.Request("http://myapi.com", headers={"token":token})
html = urlopen(webRequest)
服务器响应
服务器响应的数据格式一般是JSON
或者XML
。目前JSON
比较多,原因有很多,其中一点就是JSON
文件比完整的 XML
格式小;加上网络技术的改变,后端的语言越来越多,基本上都可以实现接口。
API
调用的语法也有不同,但也有约定俗成的准则。例如,当使用 GET
请求获取数据时,用URL
路径描述你要获取的数据范围,查询参数可以作为过滤器或附加请求使用;也有许多 API
会通过文件路径(path)的形式指定 API
版本、数据格式和其他属性;还有一些 API
会通过请求参数(request parameter)
的形式指定数据格式和 API
版本:
市面上比较多的公司或者网站都有自己的公开的接口,例如推特,Google
等。
解析JSON数据
例如我们采用GET
的方式请求http://freegeoip.net/json/50.78.253.58
,查看返回的数据。返回为:
1 |
{"ip":"50.78.253.58","country_code":"US","country_name":"United States","region_code":"MA","region_name":"Massachusetts","city":"Boston","zip_code":"02116","time_zone":"America/New_York","latitude":42.3496,"longitude":-71.0746,"metro_code":506} |
---|
现在我们采用Python
来解析。JSON
是Python
的标准库,不需要额外安装。代码如下:
import json
from urllib.request import urlopen
def getCountry(ipAddress):
res = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
resJson = json.loads(res)
return resJson.get('country_code')
print(getCountry("22.18.53.22"))
Python 使用了一种更加灵活的方式,把 JSON 转换成字典,JSON 数组转换成列表,JSON 字符串转换成 Python 字符串。
- IronPython 2.0 beta 5
- node.js如何制作命令行工具(一)
- (28) 剖析包装类 (下) / 计算机程序的思维逻辑
- Linux进程监控工具Supervisor简易使用教程
- (29) 剖析String / 计算机程序的思维逻辑
- (27) 剖析包装类 (中) / 计算机程序的思维逻辑
- Python量子力学计算模拟以及数据可视化
- (26) 剖析包装类 (上) / 计算机程序的思维逻辑
- (25) 异常 (下) / 计算机程序的思维逻辑
- (24) 异常 (上) / 计算机程序的思维逻辑
- Python3.6新特性官方文档中文版
- (23) 枚举的本质 / 计算机程序的思维逻辑
- (22) 代码的组织机制 / 计算机程序的思维逻辑
- Python开发微信公众号后台(系列二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 推荐一款MD神器吧:重度MD用户必备神器
- 鸿蒙系统开源
- 40张图看懂分布式追踪系统原理及实践
- 为什么我们需要批量操作?
- 面向对象与函数式编程的简单案例
- 小白学PyTorch | 6 模型的构建访问遍历存储(附代码)
- MLQuant:基于XGBoost的金融时序交易策略(附代码)
- 探索在网页中使用“标注”
- 笔试题:了解穷举算法吗?如何用代码实现
- 硬核看房利器——Web 全景的实现
- 超级播放器tcplayer如何设置logo
- 【Flutter 实战】1.20版本更新及新增组件
- 手把手教你使用Python实现常用的假设检验 !
- Oracle 每日一题系列合集
- Arrow更好用的python时间序列处理库,你用过吗?