当前位置: 首页 > news >正文

爬虫——同步与异步加载

 

一、同步加载

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

比如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.mrgr.cn/news/41843.html

相关文章:

  • RTSP作为客户端 推流 拉流的过程分析
  • 商城网站建设怎么建
  • 热网无线监测系统 GetMenuItem 接口存在SQL注入漏洞
  • 点云补全 学习笔记
  • 前端框架Angular 详细学习要点
  • 【Godot4.3】基于中心点连线的矩形重叠检测
  • 「4.3」维护序列
  • android Activity生命周期
  • SpringBoot实现美容院管理自动化:技术与实践
  • 【PostgreSQL】实战篇——数据备份和恢复的最佳实践和工具
  • Go语言实现长连接并发框架 - 连接
  • #Swift :回调地狱 的解决 —— 通过 task/await 来替代 nested mutiple trailing closure 来进行 回调的解耦
  • 智能编码助手【通义灵码】实践指南
  • 容器适配器-stack、queue、priority_queue和仿函数
  • SpringBoot系列 启动流程
  • 登录功能开发 P167重点
  • 【Redis入门到精通九】Redis中的主从复制
  • Redis: 集群架构,优缺点和数据分区方式和算法
  • 软件修改工具----盘点那些免费的windows系统下的16进制编辑器 软件修改好帮手
  • Framebuffer学习