本系列两篇文章讲API的概念,以及它在爬虫中的使用,分为如下部分
API概念
库的API
数据API
Github API
httpbin
其他API
由于篇幅限制,本文只展示API概念
库的API
数据API
API概念
API(Application Programming Interface)即应用程序接口。可以理解成一个地方,那里有整理得非常好的、供人随意调用的资源。
可以先看知乎这两个问题中的回答进一步理解一下
python爬虫中通常提到的API一般有两种情况:数据API和库的API。
库的API
库的API很好理解,就是一个人写了一个python库,他要找一个地方告诉你库里的每个函数接什么样的参数,一个对象可以调用什么样的方法,这个地方可以称为API。它其实是开发者和使用者之间的一个桥梁,一个接口。
举两个例子,让读者有一个直观的认识
1.pymysql库的api看这个网站,如下图所示
这是pymysql库的说明文档,里面有User Guide是面向使用用户的教程,还有一个就是API Reference就是这里说的API接口,点进其中一个可以看到
点进其中一个可以看到
数据API
这种形式的API一般是前端和后端的桥梁。后端计算出结果或者要展示什么数据,就设计一个数据接口(API),前端人员(可以理解成制作网页页面的人)调用这个接口,即可获取数据,将数据展示到页面上。这种API的设计是很有讲究的,设计一个方便易用、易于维护的接口,对前后端工作人员的协作是非常有帮助的。如果用百度搜索“接口设计”,会搜到很多关于接口设计的原则。
这种API一般以URL形式存在,有些API不仅在网站内部使用,而且也向外界提供,我们可以通过访问这些URL来获取数据。
假设一个场景,比如我要做一个app,每天展示知乎上被浏览数量最多的几个回答,再拿一些数据做图表等。这时我需要拿到知乎的数据进行分析再展示。如何拿到数据呢?我可以用爬虫去全网爬,但是这样不仅耗时耗力,而且对知乎服务器会造成比较大的压力。如果知乎给我提供一个API,里面整齐地放着我想要的数据,那么我就可以更方便地获取数据,同时知乎服务器压力也会小很多。如果另一个人也有了一个idea,想做另一个关于知乎的app,他也要获得数据,他也可以用这同一个API。甚至知乎网站上展示的页面中的信息也可以是从API中调用的。所以这样一个数据接口就可以供多方使用,非常方便且多方获益,很多网站都会提供。
通常来说,如果网站提供了API,我们就不要去抓他们的HTML代码了,应该直接接入他们的API获取数据。这样做既减轻了他们的服务器压力,也让我们免去解析他们网页的繁杂工作。
说了这么多,我们来看一个例子
右键-检查,选择Network,刷新页面,在XHR下找到下面这个文件
这就是知乎API提供的数据,是用json格式存储的数据,每一条是专栏中一篇文章的各个信息,包括标题、文章标题、作者信息等等。如果我们要用爬虫抓取这个专栏的文章信息,直接从这个文件里提取信息是要比解析HTML代码更方便的。其实这个页面也是从这个API中获取数据,再传入HTML代码中展示给我们的。
这个API是一个URL的形式(当前是Preview栏,改成Headers栏即可看到这个URL)
https://zhuanlan.zhihu.com/api/columns/python-programming/posts?limit=20
(注意里面有api字样)把这个链接输入浏览器里就可以看到刚刚看到的信息了。
本专栏上一篇文章中抓取ajax动态加载页面问题就是通过请求API获得的数据。
知乎其实没有显示地提供API,只是我们在分析知乎页面加载文件时可以查找到网站内部使用的API。而有些人就通过爬虫做了知乎的API放在github上,百度一搜可以看到很多。如果连分析网页都懒得做,可以直接调用这些项目提供的API,只是他们提供的数据接口不一定包含你想要的数据,而且他们的代码也很难保证能持续运行。
而有很多网站是对外公布API,并且提供API使用说明的,下一篇文章我们会用到具体网站的API,讲述如何查看API文档、获得API权限、从API中获取数据。
专栏信息
专栏目录:目录