Python网络数据采集之使用API|第03天

Python网络数据采集之使用API|第03天

User:DemoChen Date:2018-03-30 Mark:《Python网络数据采集》 原文:https://chensenlin.cn/posts/37773/

网络采集系列文章

Python网络数据采集之创建爬虫

Python网络数据采集之HTML解析

Python网络数据采集之开始采集

使用API

API概述

百度百科关于API的解释:APIApplication 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来解析。JSONPython的标准库,不需要额外安装。代码如下:

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 字符串。

今天的比较简单哈哈,这么快就完了。我觉得有过开发经验这点完全可以忽略了。关注我,可以看到后续的文章更新。欢迎讨论。

欢迎你免费加入我的星球,一起分享,共同成长。

知识星球

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发与安全

linux环境常用的性能监控和协助开发调试工具

linux有诸多优秀的工具帮助我们分析服务器各项性能指标和协助开发调试工作。下面只列举比较基础的命令,且一般是集成在linux环境中而不需再次安装的...

4231
来自专栏极客猴

Python 多进程与多线程

如果你把上篇多线程和多进程的文章搞定了,那么要恭喜你了 。你编写爬虫的能力上了一个崭新的台阶。不过,我们还不能沾沾自喜,因为任重而道远。那么接下来就关注下本文的...

1351
来自专栏Java技术栈

细数Intellij Idea的10个蛋疼问题!

Intellij Idea以下简称IJ。 昨天细数了IJ上的10大666的姿势,IJ确实很智能,在很多方便可以完爆Eclipes,可在某些方面真的被Eclips...

3195
来自专栏IT技术精选文摘

缓存在分布式系统中的应用

缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。 一、缓存概述 缓存是分布式系统中的重要组件,主要...

3599
来自专栏北京马哥教育

运维必读:Linux 的内存分页管理

内存是计算机的主存储器。内存为进程开辟出进程空间,让进程在其中保存数据。我将从内存的物理特性出发,深入到内存管理的细节,特别是了解虚拟内存和内存分页的概念。

1273
来自专栏企鹅号快讯

如何在不会导致服务器宕机的情况下,用 PHP 读取大文件

英文:Christopher Pitt ,译文:oschina www.oschina.net/translate/performant-reading-big...

2629
来自专栏企鹅号快讯

做网站-推荐3种CSS,JS合并的方式

在Web项目的开发中,js,css文件会随着项目的开发变得越来越多,越来越大,这就给给性能方面带来一些问题,如,页面引入的的js,css越多的话,那么对就增加了...

71511
来自专栏码神联盟

灵丹妙药 | 关于缓存,你必须要知道的

这两天小编一直在总结缓存的要点,也同时参考了一些文档,仅此奉上,以供参考。 缓存是必备技能 身为后端开发的开发人员,缓存是必备技能。不需要花费太多的精力就能显著...

3587
来自专栏纯洁的微笑

一次线上问题排查所引发的思考

之前或多或少分享过一些内存模型、对象创建之类的内容,其实大部分人看完都是懵懵懂懂,也不知道这些的实际意义。

1201
来自专栏Java技术栈

让面试官颤抖的 HTTP 2.0 协议面试题

Http协议,对于拥有丰富开发经验的程序员来说简直是信手拈来,家常便饭。虽然天天见,但是对于http协议的问题,可能很多人在没有积极准备的情况下,不一定能很好的...

2142

扫码关注云+社区

领取腾讯云代金券