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

爬虫——同步与异步加载

 

一、同步加载

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

比如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.kler.cn/news/332079.html

相关文章:

  • 【Docker从入门到进阶】05. 实战案例
  • Java高效编程(18):优先使用组合而非继承
  • 宁夏众智科技OA办公系统存在SQL注入漏洞
  • HBase 性能优化 详解
  • GO语言深度探索:并发编程与高性能网络服务器实践
  • 一种简单安全的消息队列的C语言解决方案
  • CDGA|利用人工智能与边缘计算显著提升数据治理效率与效果的实践案例
  • 慢病中医药膳养生食疗管理微信小程序、基于微信小程序的慢病中医药膳养生食疗管理系统设计与实现、中医药膳养生食疗管理微信小程序的开发与应用(源码+文档+定制)
  • C++发邮件:如何轻松实现邮件自动化发送?
  • 828华为云征文|华为云Flexus云服务器X实例部署 即时通讯IM聊天交友软件——高性能服务器实现120W并发连接
  • MySQL 支持行锁还是表锁?分别有哪些优缺点?破解数据库的锁之谜:MySQL行锁与表锁的博弈
  • index.html 调用 ajax
  • 【Bug】STM32F1的PB3和PB4无法正常输出
  • 【案例73】Uclient无法读取https地址添加应用
  • MySQL 实验 3:创建数据表
  • 滚雪球学MySQL[8.2讲]:MySQL事件调度详解:定时任务的创建与管理及使用场景
  • 【web安全】——信息收集
  • cmd命令大全详解
  • Windows11系统下SkyWalking环境搭建教程
  • iSTFT 完美重构的条件详解