如何抓取API接口中的数据
一、API接口概述
绵阳网站建设公司创新互联,绵阳网站设计制作,有大型网站制作公司丰富经验。已为绵阳上千余家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的绵阳做网站的公司定做!
今天我们来讲一种更快捷的获取数据的方式,通过API数据接口抓取数据。
API接口是负责传递数据的,在现今已存在的网站中,除了极个别非常古老的网站,大部分的网站都会采用API进行数据的传输。那么为什么API接口这么受欢迎呢,那当然是其带来了很多的好处,最直观的便是节省了开发的大量时间、大量金钱。举个例子:一个编程团队想制作一个游戏,在这个游戏里有付费的功能,那么就需要有一个支付的平台,而众所周知,支付平台是需要有很大能力去保证安全且需要一定的资金还有资质的,普通的团队压根搞不起啊,所以,这个团队,就需要用到“API接口”,他可以接入其他的支付平台API接口实现支付功能,这样就省去了很多的麻烦。所以,不例外的我们要获取的数据也是可以通过API接口传递到页面中的,那么如何利用好API接口,这便是我们要学习的了。
二、API接口结构
API接口长什么样子呢,请继续看:
https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=xxxxx&num=xx&vip=x
上方这个URL便是一个API接口,它是由请求地址和请求参数两部分构成的,请求地址和请求参数之间使用?连接,请求参数要写成key=value的形式(我们常说的键值对),如果同时有多个请求参数,请求参数之前使用&连接。
请求地址,顾名思义就是你请求的服务器的入口;请求参数,就是按照设定你得告诉服务器你要做什么。相信大家也尝试打开这个链接了,结果发现什么也没有,那是因为这个API的请求参数设定不正确。
这是一个QQ价格评估接口,这是它需要的参数信息以及返回结果信息:
我们只需要按照上图的信息稍微修改下,便能得到想要的信息。
https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=1766*****6&num=68&vip=1
这便是我的QQ的评估价格
那么API接口的数据如何被爬虫获取到呢?
三、requests请求API
API接口的请求就是简单的requests代码的编写,一定注意要把API写对。
从前文讲requests到现在讲爬取接口,我们一直使用的是get请求方式,后续会单独讲一次post请求。另外,一般爬取开放的API不需要对爬虫添加伪装,但是如果是爬取某些大型网站的API接口,可能会需要传递你登录这个网站的账号密码、headers等参数。
import requestsAPI_URL = 'https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=1766*****706&num=68&vip=1'
response = requests.get(url=API_URL)
result = response.text if response.status_code == 200 else '{}'
print(result)
上方代码执行后结果是这样的:
{"code":"1","qq":"176***5706","money": "112","dengji":"68级 ","vip":"非会员"}
大家看到这个结果感觉很熟悉,像Python中的字典,但不完全是。API接口中的数据是JSON数据,被我们拿出来以后就变成了字符串。但是我们是可以将JSON数据转换为Python的字典类型的。
import json# 字符串序列化
data = json.loads(result)
print(data, type(data))
# {'code': '1', 'qq': '1766935706', 'money': '112', 'dengji': '68级 ', 'vip': '非会员'} <class 'dict'>
# 提取QQ估价
print(data['money'])
# 112
至此,我们遍能够拿到API接口中的数据了。
五、在网站中寻找API接口
在此以今日头条这个网站为例。
正常的逻辑是不是就是使用requests结合正则表达式或者BeautifulSoup4进行数据的爬取,但是我们可以先试着找找有没有数据接口能够让我们更快速的得到数据。
使用快捷键F12(有些电脑是Fn + F12)或者直接网页中右键点击检查按钮打开开发者工具,如下图所示,按照箭头顺序先切换到Network,再点击Fetch/XHR,再重新刷新下页面,就能够看到红框中加载出一些资源文件。
这些资源文件中就有可能存在我们想找的API数据接口,不是所有的网站都能找到数据接口,有些网站的数据接口很隐蔽,正常手段找不到,需要结合抓包工具才能够找到,这里我们暂时先来讲解一般的API接口寻找,后续单独说明抓包工具的使用。
如何判断哪个资源文件是我们想要的数据接口呢?最简单的方法便是一个个的看。首先观察红框中的这样几个字段:Name、Status、Size、Time。
Name:文件名,我们依旧是遵循见名知义的原则,通过文件名猜测文件对应的数据、
Status:状态码,我们需要的是状态码为200的文件、
Size:文件大小,数据多的资源文件大小都挺大的、
Time:加载时间,数据多的资源文件加载速度不一定很快。
当你点击了某个资源文件,在弹出来的窗口切换到Preview预览选项卡发现加载出来的数据和页面信息大概保持一致时,API数据接口就找对了。此时便可以复制它的在线地址,写爬虫代码去请求这个接口来提取数据了。
import requestsimport json
API_URL = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc&_signature=_02B4Z6wo00f01TIgxfQAAIDCpvae--DE-40yBMFAAC9V19pn3J.1AFd.u3TRK0tR1rbObxwJ7qLFJCGXBd0Z35J32hVZFJbsVx4puKKLsSDQInjDwZpK4c6DlvBFgCuz3EkKw6APt9jwKbeG36'
response = requests.get(url=API_URL)
result = response.text if response.status_code == 200 else '{}'
# print(result)
NewsInfo = json.loads(result)
for news_dict in NewsInfo['data']:
newsTitle = news_dict['Title']
print(newsTitle)
新闻标题:如何抓取API接口中的数据
网页网址:http://scjbc.cn/article/dgpjpcg.html