爬虫——同步与异步加载

embedded/2024/10/20 20:55:23/

 

一、同步加载

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

比如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/embedded/124388.html

相关文章

每天五分钟深度学习pytorch:基于pytorch搭建多项式线性回归模型

本文重点 我们前面学习了基于pytoch搭建一元线性回归模型,本文我们学习使用pytorch搭建多项式的回归模型,在学习这个之前我们需要了解一下什么是多项式回归模型? 多项式回归模型和多变量(多特征)的回归模型是不一样的,多变量就是一个样本有多个特征属性,而多项式就是一…

VUE 整合 ECharts

一、vue 引入 ECharts依赖 npm install echarts --save 二、创建盒子 <div ref"chars" style"height: 500px;width:800px;"></div> 解释说明 ref"chars" 是 Vue.js 中一个非常有用的特性&#xff0c;用于给 DOM 元素或组件实例…

SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?

在现代Web开发中&#xff0c;SpringBoot以其简化的配置和快速的开发效率而受到广大开发者的青睐。本篇文章将带领你从零开始&#xff0c;搭建一个基于SpringBoot的简单Web应用~ 一、前提准备 想要创建一个SpringBoot项目&#xff0c;需要做如下准备&#xff1a; idea集成开发…

数据库中,如何查询表中的所有记录?

在Java应用中&#xff0c;从数据库查询所有记录是一个常见的操作。 对于Java工程师来说&#xff0c;不仅要熟悉如何使用JDBC来执行这样的查询&#xff0c;还应该了解如何利用ORM框架简化数据访问&#xff0c;并且要能够提出一些最佳实践以确保代码的高效、安全和可维护性。 1…

数据结构与算法笔记:概念与leetcode练习题

1、数组Array 时间复杂度 数组访问&#xff1a;O(1) 数组搜索&#xff1a;O(N) 数组插入&#xff1a;O(N) 数组删除&#xff1a;O(N) 特点 适合读&#xff0c;不适合写 数组常用操作 # 1、创建数组 a [] # 2、尾部添加元素 a.append(1) a.append(2) a.append(3) # 3、…

大数据新视界 --大数据大厂之数据质量评估指标与方法:提升数据可信度

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Web-Machine-N7解题过程

1.主机探测 arp-scan -lnmap -sn 192.168.1.0/24sudo netdiscover -r 192.168.1.0/24masscan -p0-65535 192.168.1.0/24 2.端口扫描 nmap -A -sC -sT -sV 192.168.1.188 --min-rate 10000 &#xff08;简略扫描&#xff09;nmap -sS 192.168.1.188 -A&#xff1a; 启用操作系…

毕业设计——医院信息化系统原型设计

作品详情 主要功能&#xff1a; 信息化系统是以患者为中心&#xff0c;服务于重症科室医务人员&#xff0c;提高工作效率及医疗服务质量。软件主要包含了重症医学临床管理系统和中央监控站&#xff0c;重症医学临床管理系统主要实现患者床位总览、患者护理、医嘱管理、数据字典…