美文网首页PythonPython学习日志程序员
Python网络数据采集之使用API|第03天

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

作者: 你好我是森林 | 来源:发表于2018-03-30 22:15 被阅读357次

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

    User:DemoChen
    Date:2018-03-30
    Mark:《Python网络数据采集》

    网络采集系列文章

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

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

    博客原文链接:https://chensenlin.cn/posts/37773/

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

    知识星球

    相关文章

      网友评论

      本文标题:Python网络数据采集之使用API|第03天

      本文链接:https://www.haomeiwen.com/subject/cedwcftx.html