- User:DemoChen
- Date:2018-03-30
Mark: 书籍 Python 网络数据采集
网络采集系列文章
Python 网络数据采集之创建爬虫
Python 网络数据采集之 html 解析
Python 网络数据采集之开始采集
使用 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
, 查看返回的数据返回为:
{"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 字符串
来源: http://www.jianshu.com/p/fa1f0dd280eb