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

2024-01-04

前面已经讲解过 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 requests

API_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 接口从而将数据快速无误的抓取下来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate

随机推荐

  • 基于SpringBoot的足球青训俱乐部

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的足球
  • linux 定时任务crontab编写

    使用命令 crontab e 0 0 sh opt maxwellToMysql create data log sh 编写完保存
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • (vue)el-popover鼠标移入提示效果

    vue el popover鼠标移入提示效果 效果 代码
  • Cannot locate tasks that match ‘:shared:testClasses‘ as task ‘testClasses‘ not found in project

    问题 在使用Gradle构建项目时 遇见了一个奇怪的问题 运行报错如下 Cannot locate tasks that match shared testClasses as task testClasses not found in p
  • Multipath多路径管理基础介绍与安装配置使用

    0x00 前言简述 Q 什么是Multipath多路径 答 Multipath I O 电脑储存技术 指利用两个以上的路径同时在CPU与储存设备之间传送讯号 以达到侦错与强化效能的目的 简单的说当 服务器 到某一存储设备有多条路径时 每条路
  • @AutoConfigurationPackage,@ComponentScan注解,bean的注册

    一 AutoConfigurationPackage ComponentScan注解 二 spring加载流程之ConfigurationClassPostProcessor 三 判断是否是配置类 四 扫描配置类 五 注册bean
  • 天翼运行高校云盘在线扩容

    天翼云文档地址 https www ctyun cn document 10027696 10169558 1 输入 growpart命令 检查此云主机是否已安装growpart扩容工具 若出现图中回显信息 则说明已经安装 无需手动安装 注
  • 说说Java对象创建过程

    Java对象创建过程主要包括以下几个步骤 分配内存 Java虚拟机 JVM 为新对象分配内存 这通常涉及到在堆内存中分配一块足够大的空间来存储对象 构造函数调用 在分配内存后 Java对象的构造函数被调用 这是Java对象的一个特殊方法 它
  • 任意版本JLink驱动官方下载详解

    任意版本JLink驱动官方下载详解 csdn song123 于 2023 09 21 09 19 07 发布 阅读量1 5k 收藏 3
  • 看这里!分享3个有关iPhone照片恢复的好用方法!

    手机照片可以记录下我们所经历的点点滴滴 为我们留下宝贵的生活记忆 因此 我们应该珍惜并妥善保管这些照片 但在使用手机的过程中难免会发生意外 手机照片丢失了怎么办 别着急 今天 小编将为大家介绍有关iPhone照片恢复的3种简单方法 有需要的
  • openEuler NFS多路径

    简介 网络文件系统 NFS 是一种分布式文件系统协议 最初由 Sun Microsystems Sun 于 1984 年开发 允许NFS客户端上的用户通过计算机网络访问NFS服务端上文件 随着NFS服务广泛应用于金融 EDA AI 容器等行
  • 105.mysql8.0.30之后REDO日志的管理有所不同-#innodb_redo 目录

    1 mysql8 0 30之后REDO日志的管理有所不同 innodb redo 目录 1 mysql8 0 30之前 redo日志由两个参数管理 innodb log file size 100M innodb log files in
  • brew 安装使用 mysql、redis、mongodb

    在 Mac 生态中 brew 真是个万能神器 今天就来介绍一下怎么使用 brew 安装 mysql redis mongodb 以及如何使用 brew 启动 关闭 重启这些服务 前言 brew 常用命令 查看brew的版本 brew v 更
  • 基于SpringBoot的社区医院管理系统

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的社区
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位
  • java SSM图片管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一 源码特点 java SSM图片管理系统是一套完善的web设计系统 系统采用SSM框架进行设计开发 spring springMVC mybatis 对理解JSP java编程开发语言有帮助 系统具有完整的源代码和 数据库 系统主要采用B
  • Linux习题2

    解析 虚拟内存是计算机系统内存管理的一种技术 它使得应用程序认为它拥有连续可用的内存 使得每个进程看到的内存空间一致 解析 所谓系统调用 就是内核提供的 功能十分强大的一系列的函数 这些系统调用是在内核中实现的 再通过一定的方式把系统调用给
  • 基于WEB的教学辅助系统的设计与实现

    随着计算机和网络技术的飞速发展 人们传统的生活 工作和学习方式正在发生深刻变革 长久以来 各行各业的教学以传统的课堂讲授为主 效果受到诸多限制 因此 随着在线辅助教学及行业信息化的普及 构建信息交互平台的重要性日益凸显 为了提高教育质量 充
  • 可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据

    前面已经讲解过 Requests 结合 BeautifulSoup4 库抓取数据 这种方式在抓取数据时还是比较方便快捷的 但是这并不意味着所有的网站都适合这种方式 并且这也不是抓取数据的最快方式 今天我们来讲一种更快速的获取数据的方式 通过