共计 2366 个字符,预计需要花费 6 分钟才能阅读完成。
利用编程接口(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 相干的内容。
如果喜爱欢送订阅我的频道。