前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫系列:使用 API

爬虫系列:使用 API

原创
作者头像
太后
修改2021-10-28 16:46:12
8590
修改2021-10-28 16:46:12
举报
文章被收录于专栏:短信接收服务

应用编程接口(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/data/ip-geolocation-full?ip=27.30.84.181&localityLanguage=zh&key=bee73355d8ad4821a1c393c545e7f0

你通过浏览器输入以上网址,就可以发起一个简单的 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 相关的内容。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云 API
云 API 是腾讯云开放生态的基石。通过云 API,只需少量的代码即可快速操作云产品;在熟练的情况下,使用云 API 完成一些频繁调用的功能可以极大提高效率;除此之外,通过 API 可以组合功能,实现更高级的功能,易于自动化, 易于远程调用, 兼容性强,对系统要求低。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档