可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据

2024-01-04 11:52

本文主要是介绍可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面已经讲解过 Requests 结合 BeautifulSoup4 库抓取数据,这种方式在抓取数据时还是比较方便快捷的,但是这并不意味着所有的网站都适合这种方式,并且这也不是抓取数据的最快方式,今天我们来讲一种更快速的获取数据的方式,通过 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](https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=xxxxx&num=xx&vip=xxx)
上方这个 URL 便是一个 API 接口,它是由请求地址和请求参数两部分构成的,请求地址和请求参数之间使用?连接,请求参数要写成key=value的形式(我们常说的键值对形式),如果同时有多个请求参数,请求参数之前使用&连接。

请求地址,顾名思义就是你请求的服务器的入口;
请求参数,就是按照设定你得告诉服务器你要做什么。

相信大家也尝试打开这个链接了,结果发现什么也没有,甚至还报错,那是因为这个 API 接口的请求参数设定不正确,使用 API 接口就需要保证请求参数的正确性。
上面的 API 接口其实是一个QQ价格评估接口,这是它需要的参数信息以及返回结果信息:
Untitled.png
我们只需要按照上图的信息稍微修改下,便能得到一个正确的可访问的 API 接口:[https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=1766935706&num=71&vip=1](https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=1766935706&num=68&vip=1),这是我用自己的 QQ 做的实例演示,结果如下,这就是此 API 接口实现的功能以及传递的数据。
image.png
那么 API 接口中的数据是如何被爬虫获取到呢?

三、Requests请求API

API 接口本质也是一个 URL,所以也是可以使用 Requests 进行请求的。

import requestsAPI_URL = 'https://v.api.aa1.cn/api/api-qq-gj/index.php?qq=1766935706&num=71&vip=1'
Headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
response = requests.get(url=API_URL, headers=Headers, verify=False)
result = response.text if response.status_code == 200 else '状态码异常'
print(result)

我们请求这个 API 接口的结果如下图所示。

注意:上述代码中有一个还未曾涉及到的知识点,我暂时先给大家做一个简单的解释:Requests 请求时,我在 get 方法中添加了一个 verify=False,表示移除 SSL 认证,因为我们请求的这个 API 接口没有 SSL 证书,不添加 verify=False 会报错,后续我们会出一篇文章单独进行说明。

image.png
至此,我们使用爬虫获取到了一个 API 接口中的数据,在下一篇文章中我将带大家学习如何在一个网页中寻找 API 接口从而将数据快速无误的抓取下来。

这篇关于可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569256

相关文章

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.