爬虫——同步与异步加载

ops/2024/10/20 11:40:48/

 

一、同步加载

同步模式--阻塞模式(就是会阻止你浏览器的一个后续加载)停止了后续的解析 因此停止了后续的文件加载(图像)

比如hifini音乐网站

二、异步加载

异步加载--xhr(重点)

比如腾讯新闻,腾讯招聘等

三、同步加载和异步加载的区分

1.网页数据返回的方式

(数据返回给你客户端的时候返回的方式有哪些)

---直接返回的网页文本

---ajax加载(通过异步加载回来的数据 一般都是json数据)

----javascript渲染

2.区别

观察你在翻页的时候刷新按钮有没有动

动了 ----- 同步--找数据包优先找all

未动 --异步--找数据包优先找xhr

注意:我们去抓取网站 大致分为两种类别:
    ---网页文本(html)
    -----通过接口返回的数据(json)

爬取腾讯新闻——异步加载

7b9dea51aaa64feeb1d15fb94679ebf9.png

注意:优先找带有list的数据包——offset、limit——headers

点击之后,可以在预览部分查看会否有需要的数据。如果有就说明数据包没有找错。

当你不断往下滑刷新页面后,这时就会出现上面2中,类似的url地址,只不过他的offset会发生变化

示例代码:

import requests
from jsonpath import jsonpath
#发请求
url = "https://i.news.qq.com/trpc.qqnews_web.kv_srv.kv_srv_http_proxy/list"
#ctrl+r
data = {'sub_srv_id':'24hours','srv_id':'pc','offset':'40','limit':'20','strategy':'1','ext':'{"pool":["top","hot"],"is_filter":7,"check_type":true}',
}
def get_data():headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'}r = requests.get(url,headers=headers,params=data)if r.status_code==200:# d =r.text# print(d)json_data = r.json()# print(json_data)return json_data
#解析
def parse_data(data):#形参站位 模拟的就是json_data#第一个参数是你要解析的对象 第二个参数是解析语法 $表示根节点 ..表示跳过中间任意层级 直接找到目标层级,.表示一个层级title = jsonpath(data,'$..title')#标题url = jsonpath(data,'$..url')# print(title)# print(url)for titles,urls in zip(title,url):print(titles)print(urls)print('========================')if __name__ == '__main__':h = get_data()parse_data(h)

zip可将多个可迭代对象打包成元组,返回有这些元组组成的列表

a51c38f7d10d40d18da26c20b35c0936.png

四、jsonpath用法

示例代码:

from jsonpath import jsonpath
data = { "store": {"book": [{ "category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{ "category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{ "category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{ "category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}}
}
authors=jsonpath(data,'$..author')
titles=jsonpath(data,'$.store.book[*].title')
items=jsonpath(data,'$.store.*')
print(authors)
print(titles)
print(items)

运行结果:

2e1eeeefc3ee48eaa4cdd3d8bcf96c23.png

 


http://www.ppmy.cn/ops/121903.html

相关文章

力扣之1285.找到连续区间的开始和结束

题目 sql建表语句: Create table If Not Exists Logs (log_id int); Truncate table Logs; insert into Logs (log_id) values (1); insert into Logs (log_id) values (2); insert into Logs (log_id) values (3); insert into Logs (log_id) values (7); inse…

微型导轨在IC制造设备的应用与优势

微型导轨的精度和稳定性对于机器的准确执行任务至关重要,其精确度通常用微米或毫米来衡量。其尺寸可以做到非常小,常运用在小型设备上,尤其是在IC制造设备中,其应用非常广泛。 在IC制造设备中主要用于半导体芯片的切割、封装和测试…

Matlab|计及需求响应消纳风电的电热综合能源系统经济调度

目录 1 主要内容 场景分析 目标函数: 约束条件: 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序主要参考《计及需求响应消纳风电的电热综合能源系统经济调度》第四章内容,模型负荷侧应用需求响应的基本原理,在日前应用…

如何使用ssm实现基于bootstrap的课程辅助教学网站的设计与实现+vue

TOC ssm782基于bootstrap的课程辅助教学网站的设计与实现vue 第1章 绪论 1.1研究背景与意义 在科学技术水平还比较低下的时期,学校通常采用人工登记的方式对相关的课程信息进行记录,而后对这些信息记录进行管理和控制。这种采用纸质存储信息的管理模…

在 Ubuntu 18.04 上安装 Syncthing

在 Ubuntu 18.04 上安装 Syncthing 是一个简单的过程。Syncthing 提供官方的 apt 仓库,使用该仓库可以方便地安装和更新 Syncthing。 https://syncthing.net/downloads/ 文章目录 安装步骤 1: 添加 Syncthing 官方仓库步骤 2: 安装 Syncthing步骤 3: 启动并运行 S…

Async-Validator——表单验证的艺术

在现代 web 应用开发中,表单验证是一个不可或缺的部分。它确保了用户输入的数据符合预期的格式和规则,从而提高了数据的质量和用户体验。async-validator 是一个强大的 JavaScript 库,它专门用于异步表单验证,被广泛应用于主流 UI…

李宏毅深度学习-梯度下降和Batch Normalization批量归一化

Gradient Descent梯度下降 ▽ -> 梯度gradient -> vector向量 -> 下图中的红色箭头(loss等高线的法线方向) Tip1: Tuning your learning rates Adaptive Learning Rates自适应lr 通常lr会越来越小 Adaptive Learning Rates中每个参数都给它不…

使用 Node.js 创建一个 WebSocket 服务器

使用 Node.js 创建一个 WebSocket 服务器相对简单。你可以使用 ws 库,这是一个流行的 WebSocket 实现。以下是一个基本的步骤来创建一个 WebSocket 服务器: 1.初始化 Node.js 项目: 首先,你需要一个 Node.js 项目。如果你还没有项…