可狱可囚的爬虫系列课程 10:在网站中寻找 API 接口

news2024/9/21 0:49:38

上一篇文章我们讲述了爬虫中一个比较重要的知识点,如何从 API 接口中获取数据,本篇文章我们继续讲述,如何在网站中寻找 API 接口,我们以“今日头条”网站 https://www.toutiao.com/ 为例。
image.png
如上图所示,如果要获取页面新闻数据,可能大部分同学的想法就是直接 Requests 结合 BeautifulSoup4 库进行数据的爬取,但是我们不妨先来找找看有没有 API 接口能够让我们更快速的得到数据。所以在未来大家写爬虫时,可以先试试能否找到 API 接口,再来决定要不要使用 BeautifulSoup4 库。

一、抓包工具的使用

1. 文件的监听

我们在要爬取的页面上打开开发者工具,如下图所示,按照箭头顺序先切换到 Network 选项卡,再点击 Fetch/XHR,然后重新刷新下页面,就能看到红色椭圆框中监听到很多的资源文件。
image.png
这里使用的 Network 选项卡就是开发者工具自带的监听功能,监听网页在加载过程中涉及的一些相关数据文件,另外网页加载过程涉及很多文件,像 JS 文件、CSS 文件、Font 文件、图像文件、音视频文件等,大家先简单理解我们切换到的 Fetch/XHR 就是找 API 接口文件的位置。但是这些文件中有可能存在我们需要的 API 数据接口,有些网站的数据接口做的很隐蔽,正常手段不一定找得到,需要结合更高级的抓包工具(Wireshark、Charles 等)才有可能找到,这里我们暂时先来讲解一般的 API 接口寻找方式,后续再单独说明抓包工具的使用。

2. API 接口的判断

如何判断哪个资源文件是我们想要的数据接口呢?最简单的方法是一个个的点开看,不过这样太麻烦,我们结合一些提示性的信息给这些资源文件排个序,最高效的寻找 API 接口。
首先观察这样几个字段:Name、Status、Size、Time。
image.png

  • Name:文件名,我们依旧是遵循见名知义的原则,通过文件名猜测文件中包含的数据;
  • Status:状态码,我们需要的是状态码为200 或者 304 的文件;
  • Size:文件大小,数据量大的文件,文件大小都相对较大;
  • Time:加载时间,数据量大的文件加载速度相对慢一些。

我们结合这四个字段的特征,给监听到的文件做筛选和排序,择优选取文件查看。例如,我大胆猜测 Name 列名为 hot-board...的文件为头条热榜所涉及数据。

3. 查看文件

有了猜测目标以后,我们可以点击此文件的文件名位置,在弹出来的窗口切换到 Preview 预览选项卡,发现加载出来的数据和我们所猜测的一致,确实为头条热榜所示数据,这就证明 API 接口找对了,此时便可以从此文件上右键,复制其在线地址,用爬虫来抓取其中的数据。当然前面说了,有些 API 接口比较隐蔽,如果找不到就暂且选择老方法进行数据的爬取。
image.png
image.png

二、代码编写

1. API 接口请求

import requests

API_URL = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc&_signature=_02B4Z6wo00f01TIgxfQAAIDCpvae--DE-40yBMFAAC9V19pn3J.1AFd.u3TRK0tR1rbObxwJ7qLFJCGXBd0Z35J32hVZFJbsVx4puKKLsSDQInjDwZpK4c6DlvBFgCuz3EkKw6APt9jwKbeG36'
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)
result = response.text if response.status_code == 200 else '状态码异常'
print(result)

结果如下:
image.png
API 接口中数据是以 JSON 格式传输的,但是经过爬虫以后拿出来的结果就变成了 Python 的字符串,如上图所示,看起来像字典,但是整体结果是字符串。有同学问了,不是 JSON 吗,怎么又成了字典?你说巧不巧,JSON 格式的数据呀与 Python 的字典很像,所以 Python 提供了将字符串类型的 JSON 数据转为字典的方法,就是使用 Python 的内置 JSON 库。

2. JSON 库的使用

我们这里使用 JSON 库中的 loads 方法将字符串类型的 JSON 数据转为字典,同时仔细观察结果,通过字典的键将我们所需要的新闻准确无误的筛选出来。

import json

NewsInfo = json.loads(result)
for news_dict in NewsInfo['data']:
    newsTitle = news_dict['Title']
    print(newsTitle)

结果如下:
在这里插入图片描述

3. 完整代码

import requests
import json

API_URL = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc&_signature=_02B4Z6wo00f01TIgxfQAAIDCpvae--DE-40yBMFAAC9V19pn3J.1AFd.u3TRK0tR1rbObxwJ7qLFJCGXBd0Z35J32hVZFJbsVx4puKKLsSDQInjDwZpK4c6DlvBFgCuz3EkKw6APt9jwKbeG36'
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)
result = response.text if response.status_code == 200 else '状态码异常'

NewsInfo = json.loads(result)
for news_dict in NewsInfo['data']:
    newsTitle = news_dict['Title']
    print(newsTitle)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1366133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最新Selenium面试题,建议收藏备用!

一.你在TestNG中使用了哪些注解? Test BeforeSuite AfterSuite BeforeTest AfterTest BeforeClass AfterClass BeforeMethod AfterMethod 二.如何从Excel中读取数据? FileInputStream fs new FileInputStream(“excel文件路径”); Workbook …

力扣383.赎金信 -- 哈希表

思路&#xff1a;记录magazine每个字符个数&#xff0c;然后记录ransomNote每个字符&#xff08;每有一个减1&#xff09;&#xff0c;假如出现<0的情况说明ransomnode有字符的个数超过了magazine则无法构成&#xff0c;否则可以构成 代码&#xff1a; class Solution { pu…

Python组装jmx并调用JMeter执行压测

JMeter可以通过os命令调用Python脚本&#xff0c;Python同样可以通过系统命令调用JMeter执行压测 Python调用JMeter 首先要安装JMeter&#xff0c;官方下载地址 解压并配置配置环境路径或建立软连&#xff0c;使得在命令输入jmeter便可以执行&#xff0c;如 Copyunzip apach…

自有货源产品开通抖店后,没有流量也不出单?问题分析+解决方案

我是王路飞。 大多数没有自己货源和产品的&#xff0c;做抖店都是选择的无货源模式&#xff0c;好处就是不需要进货、囤货&#xff0c; 没有货物滞销带来的风险和资金压力&#xff0c;店铺内的产品可以是来自全平台的&#xff0c;选择性比较多。 当然也有少部分商家是自带货源…

软考高级选择考哪个好?

&#x1f4d2;软考高级总共5个科目&#xff0c;同样是高级证书&#xff0c;认可度也有区别! 大家一般在「信息系统项目管理师」✔️和「系统架构设计师」✔️二选一 1️⃣信息系统项目管理师 ❤️信息系统项目管理师也叫「高项」&#xff0c;考试内容主要是「项目管理」相关&am…

【GO语言卵细胞级别教程】01.GO基础知识

01.GO基础知识 关键词&#xff1a;GO语言教程&#xff1b;Go语言&#xff1b;Go&#xff1b;Go语言初级教程 目录 01.GO基础知识1.GO语言的发展历程2.发展历程3.Windowns安装4.VSCode配置5.基础语法5.1 第一段代码5.2 GO执行的流程5.3 语法规则5.4 代码风格5.5 学习网址 1.GO…

Java学习苦旅(二十七)——Java中的集合框架

本篇博客将初略讲解Java中的集合框架及背后的数据结构。 集合框架介绍 Java 集合框架 Java Collection Framework&#xff0c;又被称为容器 &#xff08;container&#xff09;&#xff0c;是定义在java.util包下的一组接口 interfaces 和其实现类 classes 。其主要表现为将多…

聊天Demo

文章目录 参考链接使用前端界面消息窗口平滑滚动至底部vue使用watch监听vuex中的变量变化 参考链接 vue.js实现带表情评论功能前后端实现&#xff08;仿B站评论&#xff09; vue.js实现带表情评论仿bilibili&#xff08;滚动加载效果&#xff09; vue.js支持表情输入 vue.js表…

Typescript 中创建对象的方式

1.type type MyObj {a: string;b: number;c: () > number; }; 2.interface interface MyObj {a: string;b: number;c: () > number; } 3. class class MyObj {a:string;b:number;c:()>number } // Error: Property staticProperty does not exist on type M.

强化学习的数学原理学习笔记 - 基于模型(Model-based)

文章目录 概览&#xff1a;RL方法分类基于模型&#xff08;Model-Based&#xff09;值迭代&#xff08;Value Iteration&#xff09;&#x1f7e6;策略迭代&#xff08;Policy Iteration&#xff09;&#x1f7e1;截断策略迭代&#xff08;Truncated Policy Iteration&#xff…

Tiff图片像素轻松降低,批量管理助您无忧优化!

在数字图像处理中&#xff0c;降低图片像素是一个常见的需求。无论是为了节省存储空间&#xff0c;还是为了适应不同的显示需求&#xff0c;像素的调整都至关重要。然而&#xff0c;逐个处理图片既耗时又容易出错。现在&#xff0c;有了我们的工具&#xff0c;tiff图片像素降低…

所有行业的最终归宿-知识付费saas租户平台 打造知识付费平台

随着科技的不断进步和全球化的加速发展&#xff0c;我们生活在一个信息爆炸的时代。各行各业都在努力适应这一变化&#xff0c;寻找新的商业模式和增长机会。在这个过程中&#xff0c;一个趋势逐渐凸显出来&#xff0c;那就是知识付费。可以说&#xff0c;知识付费正在成为所有…

OpenHarmony沙箱文件

一.前言 1.前景提要 DevEcoStudio版本&#xff1a;DevEco Studio 3.1 Release SDK版本&#xff1a;3.2.2.5 API版本&#xff1a;9 2.概念 在openharmony文件管理模块中&#xff0c;按文件所有者分类分为应用文件和用户文件和系统文件。 1&#xff09;沙箱文件。也叫做应…

Docker实战06|深入剖析Docker Run命令

前几篇文章中&#xff0c;重点讲解了Linux Namespace、Cgroups、AUFS的核心原理&#xff0c;同样也是Docker的底层原理实现。目录如下&#xff1a; • 《Docker实战01&#xff5c;容器与开发语言》 • 《Docker实战02&#xff5c;Namespace》 • 《Docker实战03&#xff5c;C…

SwiftUI 打造一款收缩自如的 HStack(四):Layout 自定义布局

概览 我们分别在前 3 篇博文中完成了一款可收缩“HStack”的 3 种不同解法,它们分别是: 使用 HStack 以求得“原汁原味”;使用对齐 + ZStack 以充分利用最大的可操控性;使用“魔镜”实现子视图 @ViewBuilder 更简洁多语法构造器;虽然我们最后可以达偿所愿,但是上面这几种…

uniapp自定义封装只有时分秒的组件,时分秒范围选择

说实话&#xff0c;uniapp和uview的关于只有时分秒的组件实在是不行。全是日历&#xff0c;但是实际根本就不需要日历这玩意。百度了下&#xff0c;终于看到了一个只有时分秒的组件。原地址&#xff1a;原地址&#xff0c;如若侵犯请联系我删除 <template><view clas…

文本可视化之词云图的使用

环境安装&#xff1a; pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple/ conda install wordcloud # -i 后面加镜像源网站​ WordCloud(background_color,repeat,max_words600,height480, width584, max_font_size,font_path colormap,mask,mode,coll…

【React系列】React生命周期、setState深入理解、 shouldComponentUpdate和PureComponent性能优化、脚手架

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 生命周期 1.1. 认识生命周期 很多的事物都有从创建到销毁的整个过程&#xff0c;这个过程称之为是生命周期&…

建筑模板每平方价格怎么算?

在建筑行业中&#xff0c;建筑模板是一种常用的辅助材料&#xff0c;主要用于浇筑混凝土时形成所需的结构形状。了解建筑模板的定价方式对于预算控制和成本估算至关重要。本文将详细介绍建筑模板每平方米价格的计算方法。 1. 建筑模板的类型和特点建筑模板的种类繁多&#xff0…

大模型笔记【2】 LLM in Flash

Apple最近发表了一篇文章&#xff0c;可以在iphone, MAC 上运行大模型&#xff1a;【LLM in a flash: Efficient Large Language Model Inference with Limited Memory】。 主要解决的问题是在DRAM中无法存放完整的模型和计算&#xff0c;但是Flash Memory可以存放完整的模型。…