爬虫系列:使用 API

哑火协议
• 阅读 1539

应用编程接口(Application Programming Interface, API)的用处:它为不同的应用提供了方便友好的接口。不同的开发者用不同的架构,甚至是不同的语言编写软件都没有问题——因为 API 设计的目的就是要成为一种通信语言,让不同的软件进行信息共享。

尽管目前不同的软件应用都有各自不同的 API,但“API”经常被看成“网络应用 API”,一般情况下,程序员可以用 HTTP 协议向 API 发起请求以获取某种信息,API 会用 XML(eXtensible Markup Language,可扩展标记语言)或 JSON (Javascript Object Notation,Javascript 对象表示)格式返回服务器响应的信息。尽管大多数 API 仍然在使用 XML,但是 JSON 正在快速成为数据编码格式的主流选择。

虽然这种即开即用的接口获取预先打包好的信息,看起来好像和爬虫没有什么关系,但是这种看法只是对了一半。虽然大多数人通常不会把使用 API 看成网络数据采集,但是实际上这两者使用的许多技术(都是发送 HTTP 请求)和产生的结果(都是获取信息)差不太多,两者经常是相辅相成的关系。

例如,你可能会把网络爬虫和 API 获取的信息组合起来,因为这样的信息可能更有意义。

API 概述

虽然 API 并非随处可见,但是你可以通过 API 里获取许多有用信息。如果你对音乐感兴趣,有提供歌曲名称、歌手、专辑的信息 API。

下面是 API 调用的一个示例:

https://api.bigdatacloud.net/...

你通过浏览器输入以上网址,就可以发起一个简单的 API 调用,结果如下:

{
"ip": "199.21.99.90",
"localityLanguageRequested": "zh",
"isReachableGlobally": true,
"country": {
    "isoAlpha2": "US",
    "isoAlpha3": "USA",
    "m49Code": 840,
    "name": "美国",
    "isoName": "United States of America (the)",
    "isoNameFull": "the United States of America",
    "isoAdminLanguages": [
    {
        "isoAlpha3": "eng",
        "isoAlpha2": "en",
        "isoName": "English",
        "nativeName": "English"
    }
    ],
    "unRegion": "Europe and Northern America/Northern America",
    "currency": {
    "numericCode": 840,
    "code": "USD",
    "name": "US Dollar",
    "minorUnits": 2
    },
    "wbRegion": {
    "id": "NAC",
    "iso2Code": "XU",
    "value": "North America"
    },
    "wbIncomeLevel": {
    "id": "HIC",
    "iso2Code": "XD",
    "value": "High income"
    },
    "callingCode": "1",
    "countryFlagEmoji": "

上面节选了部分结果。

你可能会想,这不就是在浏览器窗口输入一个网址,然后回车获取的(只是 JSON 格式)信息吗?究竟 API 调用和普通的网址访问有什么区别呢?如果不考虑 API 高大上的名称,其实两者没啥区别。API 可以通过 HTTP 协议下载文件,和 URL 访问网站获取数据的协议一样。它可以实现所有现在网上干的事情。API 之所以叫 API 而不叫网站的原因,其实是首先 API 有非常严谨的语法,其次 API 用 JSON 或 XML 格式表示数据,而不是 HTML 格式。

以上讲解了 API 的相关概念,获取 API 的数据,一般是 JSON 数据,我们看看在 Python 中如何解析 JSON 数据。

解析 JSON 数据

下面我们还是以刚才的例子,看看如何通过 API 获取的 JSON 数据得到需要的结果:

import requests


class ScrapeAPI(object):
    def __init__(self):
        self._api_url = 'https://api.bigdatacloud.net/data/ip-geolocation-full?ip=27.30.84.181&localityLanguage=zh&key=bee73355d8ad4821a1c19345e7f0'

    def get_geolocation(self):
        init_session = requests.Session()
        response = init_session.get(self._api_url)
        json_result = response.json()
        get_country = json_result['country']['name']
        get_location = json_result['location']
        get_region = get_location['isoPrincipalSubdivision']
        get_city = get_location['city']
        get_locality_name = get_location['localityName']
        area = f'当前 IP 国家:{get_country},地区:{get_region},城市:{get_city},区划:{get_locality_name}'
        print(area)


if __name__ == '__main__':
    ScrapeAPI().get_geolocation()

以上代码使用的是 requests 库对 JSON 数据进行解析,运行代码就可以得到我们需要的结果。

以上就是今天关于 API 相关的内容。

如果喜欢欢迎订阅我的频道。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
liam liam
3年前
细数国产接口协作平台的六把武器!
1关于接口协作平台的畅想软件界发展至今,API(接口)的重要性日益凸显——不同的端,不同的模块都在通过API交互,不同角色的成员也都在围绕着接口展开工作。在这个前提下,一款集文档、接口调试、Mock、接口自动化测试一体的接口协作平台变得尤为必须。市面上优秀的接口调试工具如Postman、JMeter如雨后春笋般涌现,各大厂也在自研接口协作平台。那么问题来了
Stella981 Stella981
3年前
ListView不同的Holder的应用
ListView不同的Holder的应用ListView需要解析的Gson格式!enterdescriptionhere(http://static.oschina.net/uploads/img/201508/20193352_QOYm.jpg"1440065760741.jpg")
专注IP定位 专注IP定位
3年前
网络安全—如何预防常见的API漏洞
跟随着互联网的全面发展,API这一词频繁出现在大家的视线之中,什么是API呢?API全称ApplicationProgrammingInterface,翻译出来叫做“应用程序接口”,是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部
Wesley13 Wesley13
3年前
初探 Objective
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言异常处理是许多高级语言都具有的特性,它可以直接中断当前函数并将控制权转交给能够处理异常的函数。不同语言在异常处理的实现上各不相同,本文主要来分析一下ObjectiveC和C这两个语言。为什么要把ObjectiveC和
陈瑞文 陈瑞文
1年前
最近整理100多个后台常用开放免费的API (程序员必备)
常用免费的API接口在当今的数字时代,API接口已经成为了各种应用程序和网站的重要组成部分。API接口可以让不同的应用程序和网站之间相互通信,实现数据交换和功能集成。然而,对于许多初创企业和个人开发者来说,开发和维护API接口的成本可能是一个巨大的负担。幸
菩提树神 菩提树神
1年前
最近收集大约200多个后台常用公开免费api接口 (调用完全不限次数)
随着互联网技术的不断发展,API(应用程序编程接口)已经成为了软件开发中不可或缺的一部分。API接口是不同软件之间进行数据交互和共享的重要途径,可以让不同的软件系统之间进行高效、快速、稳定的数据传输和处理。本文将介绍收集各种API接口的作用。一、API接口
幂简集成 幂简集成
4个月前
API 优先开发的 10 条准则:构建更强大接口的关键
在软件开发领域,应用程序编程接口()类似于一种魔术胶水,将不同的系统结合在一起,使它们能够和谐地进行通信和工作。API充当API使用者和开发人员的用户界面,应在产品策略中发挥核心作用。它应该经过精心设计,以便为API使用者提供最佳的可扩展性和体验。正如那句