004.Python爬虫系列_web请求全过程剖析(重点)

news2024/9/22 5:22:13

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集👈👈

分隔线
在这里插入图片描述

web请求全过程剖析

    • web请求全过程剖析(重点)
      • 前言
      • 页面渲染过程
        • 页面渲染过程
          • 服务器端渲染数据
          • 前端JS渲染
          • 页面嵌套加载
    • 浏览器工具的使用(重点)
      • 初识Chrome
      • 工具介绍
    • 总结

web请求全过程剖析(重点)

前言

  • 本小节给各位好好剖析一下web请求的全部过程,这样有助于后面我们遇到的各种各样的网站就有了入手的基本准则了.

  • 那么到底我们浏览器在输入完网址到我们看到网页的整体内容,这个过程中究竟发生了些什么?

  • 这里我们以百度为例

    • 在访问百度的时候,浏览器会把这一次请求发送到百度的服务器(百度的一台电脑),由服务器接收到这个请求, 然后加载一些数据. 返回给浏览器, 再由浏览器进行显示
    • 听起来好像是个废话…但是这里蕴含着一个极为重要的东西在里面
    • 注意
      • 百度的服务器返回给浏览器的不直接是页面, 而是页面源代码(由html, css, js组成)
      • 由浏览器把页面源代码进行执行, 然后把执行之后的结果展示给用户
      • 所以我们能看到在上一节的内容中,我们拿到的是百度的源代码(就是那堆看不懂的鬼东西)
    • 具体过程如图.
      • 在这里插入图片描述
  • 接下来就是一个比较重要的事情了,所有的数据都在页面源代码里么? 非也~

  • 这里要介绍一个新的概念:页面渲染过程

页面渲染过程

页面渲染过程
  • 我们常见的页面渲染过程有两种
    • 服务器端渲染数据:你需要的数据直接在页面源代码里能搜到
    • 前端JS渲染数据:你需要的数据在页面源代码里搜不到
    • 页面嵌套加载:页面通过iframe或者frameset嵌套结构加载进来
服务器端渲染数据
  • 你需要的数据直接在页面源代码里能搜到(这个最容易理解, 也是最简单的)

  • 就是我们在请求到服务器的时候,服务器直接把数据全部写入到html中,我们浏览器就能直接拿到带有数据的html内容.

  • 比如

    • 在这里插入图片描述
  • 由于数据是直接写在html中的,所以我们能看到的数据都在页面源代码中能找的到的.这种网页一般都相对比较容易就能抓取到页面内容.

前端JS渲染
  • 你需要的数据在页面源代码里搜不到

  • 这种就稍显麻烦了,这种机制一般是第一次请求服务器返回一堆HTML框架结构

  • 然后再次请求到真正保存数据的服务器,由这个服务器返回数据,最后在浏览器上对数据进行加载.

  • 就像这样:

    • 在这里插入图片描述
  • 这样做的好处是服务器那边能缓解压力,而且分工明确,比较容易维护

  • 典型的有这么一个网页

    • 在这里插入图片描述
  • 那数据是何时加载进来的呢?

  • 其实就是在我们进行页面向下滚动的时候,jd就在偷偷的加载数据了,此时想要看到这个页面的加载全过程, 我们就需要借助浏览器的调试工具了(F12)

    • 在这里插入图片描述
    • 在这里插入图片描述
    • 在这里插入图片描述
    • 在这里插入图片描述
  • 看到了吧, 页面上看到的内容其实是后加载进来的.

  • 在这里我不是要跟各位讲jd有多牛B, 也不是说这两种方式有什么不同, 只是想告诉各位,:

    • 有些时候, 我们的数据不一定都是直接来自于页面源代码.
    • 如果你在页面源代码中找不到你要的数据时, 那很可能数据是存放在另一个请求里.
页面嵌套加载
  • 有一些页面通过iframe或者frameset嵌套结构将其他网页加载进来
  • 总结
    • 你要的东西在页面源代码,直接拿源代码提取数据即可
    • 你要的东西,不在页面源代码, 需要想办法找到真正的加载数据的那个请求,然后提取数据
    • 页面嵌套加载,找到iframe的src,把这个src当做一个新的url进行请求抓取


浏览器工具的使用(重点)

初识Chrome

  • Chrome是一款非常优秀的浏览器,不仅仅体现在用户使用上,对于我们开发人员而言也是非常非常好用
  • 对于一名爬虫工程师而言,浏览器是最能直观的看到网页情况以及网页加载内容的地方
  • 我们可以按下F12来查看一些普通用户很少能使用到的工具
    • 在这里插入图片描述
  • 如果开发者工具打开之后是中文,点击右上角齿轮图标,修改语言选项为:英语(美国)- English (Us),然后重新打开开发者工具,就变成英文版了
  • 其中, 最重要的Elements、Console、Sources、Network.
  • Elements是我们实时的网页内容情况,
  • 注意:到了后期,很多人非常容易混淆Elements以及页面源代码之间的关系
    1. 页面源代码是执行js脚本以及用户操作之前的服务器返回给我们最原始的内容
    2. Elements中看到的内容是js脚本以及用户操作之后的当时的页面显示效果
    
  • 你可以理解为
    • 一个是老师批改之前的卷子(页面源代码)
    • 一个是老师批改之后的卷子(Elements)
  • 虽然都是卷子,但是内容是不一样的,而我们目前能够拿到的都是页面源代码,也就是老师批改之前的样子,这一点要格外注意。

工具介绍

  • Elements

    • 网页,鼠标右键 —— 查看网页源代码,查看的是网页源代码
    • Elements显示的是经过浏览器本身执行过一些脚本之后的内容,并非页面源代码
      • 通过网络请求,拿到一堆页面源代码 ——> 浏览器执行一些脚本 ——> elements
      • 在浏览器运行脚本之后,很有可能会改变页面源代码的一些结构
    • elements显示的是页面当前的状态
    • elements 与 页面源代码 不是一码事
      • 我们通过程序拿到的是“页面源代码”
      • 要拿到elements内容,需要通过selenium或者自动化工具调用浏览器
    • 在Elements中我们可以使用左上角的小箭头,快速定位到浏览器中每一块内容对应在Elements中当前html位置
      • 在这里插入图片描述
  • elements主要用来查看页面的结构,但是仅仅只是做参考,并不能以这个为准!必须以页面源代码为准!

  • 可以通过elements来删除页面加载出来的广告什么的

  • Console

    • 是一个控制台,我们可以在这里输入一些js代码自动执行(js逆向的时候会用到这里)
    • 可以用来查看程序员留下的一些打印内容, 以及日志内容。
      • 在这里插入图片描述
  • Source

    • 这里能看到该网页打开时加载的所有资源内容
    • 包括页面源代码、脚本、样式、图片等等全部内容
      • 在这里插入图片描述
      • Source里面看到的页面源代码跟在网页鼠标右键查看源代码是同一个东西
  • Network

    • 我们一般习惯称呼它为抓包工具。
    • 在这里我们能看到当前网页加载的所有网路网络请求,以及请求的详细内容
    • 这一点对我们爬虫来说至关重要
      • 在这里插入图片描述
      • 在这里插入图片描述
      • 在这里插入图片描述
      • 在这里插入图片描述
  • 使用Network抓包,需要勾选Preserver log选项(保存日志)
    * 避免有些网页进行跳转,跳转的时候会加载新页面,前面的原页面加载记录丢失

    • 左上角放大镜按钮可以搜索到包含指定关键字的文件
    • 点击文件后,再通过Ctrl+F查找关键字,可以快速找到
    • Network参数说明
      Preserve log勾选项          # 是否保留页面跳转之前加载的数据
      Disable cache勾选项         # 是否禁止使用缓存(作用不大)
      No throttling               # 网络速度,模拟网络很差的情况加载页面数据
          Disabled
              No throttling         # 没有阻拦
          Presets
              Fast 3G               # 快一点的3G
              Slow 3G               # 慢一点的3G
              Offline               # 离线
          Custom
              Add...
      Filter筛选                  # 筛选url资源
      
      ALL                         # 显示所有请求
      Fetch/XHR                   # 显示AJAX请求(加载的纯数据)
      Doc                         # 文档。html代码/iframe加载的内容
      CSS                         # 显示加载的CSS文件
      JS                          # 显示加载的JS文件
      Font                        # 显示加载的字体文件
      Img                         # 显示加载的图片文件
      Media                       # 显示加载的媒体文件
      Manifest                    # 
      WS                          # 显示加载的websocket(游戏)
      Wasm                        # 显示加载的wasm文件(汇编)
      Other                       # 显示加载的其他文件
      
    • 文件相关参数
      Headers					# 头相关信息(请求头、响应头)
      Response				# 响应信息(源代码),服务器返回的内容
      Preview					# 预览响应内容(主要是看json数据)
      						# 如果是图片,会直接显示图片
      						# 如果是html代码,会执行html。但是无脚本和样式加载
      						# 如果是json数据,会把json数据格式化
      Initiator				# 启动器,AJAX调用函数过程
      Timing					# 记录请求时间节点
      Cookies
      
  • 当你要找的资源内容不在源代码中的时候,就需要通过Network抓包,然后查找到包含你要的资源内容的文件,再通过文件的Headers拿到具体的请求地址request url

  • AJAX(⾳译为:阿贾克斯)

    • Asynchronous JavaScript and XML(异步的 JavaScript和 XML)
    • 是指⼀种创建交互式⽹页应⽤的⽹页开发技术,也就是在⽆需重新加载整个⽹页的情况下,能够更新部分⽹页的技术。
    • AJAX不是新的编程语⾔,⽽是⼀种使⽤现有标准的新⽅法,是⼀种⽤于创建快速动态⽹页的技术,通过在后台与服务器进⾏少量数据交换
    • AJAX 可以使⽹页实现异步更新。这意味着可以在不重新加载整个⽹页的情况下,对⽹页的某部分进⾏更新
    • 传统的⽹页(不使⽤ AJAX)如果需要更新内容或者⽤户注册信息、提交表单等,必需重新加载整个⽹页页⾯。
    • 所以说 AJAX 是⼀种与服务器交换数据并更新部分⽹页的艺术,因此我们必须掌握 AJAX 这种技术


总结

  • 获取数据步骤
  • 情况1:页面源代码中包含数据
    • 1、输入一个URL地址
    • 2、浏览器会发送一个请求给服务器 -> 请求
    • 3、服务器接收到请求之后,组织一下数据
    • 4、把数据返回给浏览器 -> 响应
  • 情况2:页面源代码中没有数据(需要抓包)
    • 1、输入一个URL地址
    • 2、浏览器会发送一个请求给服务器 -> 请求
    • 3、服务器接收到请求之后,只返回一个基本的html结构(没有数据)
    • 4、浏览器有可能再一次发送请求,服务器此时返回的就是数据了(需要通过抓包来获取这一次发送请求的url)
    • 5、浏览器会将html和数据进行整合,整合成我们需要的样子(在Elements里面可以看到数据,页面源代码中并没有)
  • 浏览器工具
    Elements        # 经过脚本渲染之后的页面源码,只能做参考,不能做获取数据的标准
    Network         # 抓包工具,网页源码中没有数据时需要用到
    Console         # 控制台,调试JS代码。后期JS逆向常用
    Source          # 页面加载的源码,包含JS、CSS、图片等。后期JS逆向常用
    
  • 使用Network进行抓包时,切记勾选Preserve log选项(保存加载记录),否则出现新的请求,会丢失前面请求的所有数据包
  • Network界面
  • 左侧是请求所有加载的数据包
  • 右侧是每一个数据包相关的信息
    ★ Header           # 头信息(含请求头、响应头等信息)
    ★ Response         # 响应数据。真正服务器返回的数据,页面源代码
    Preview             # 响应数据的预览界面
    Initiator           # 启动器。可以看到Ajax中函数的调用过程(JS逆向中使用)
    Timing              # 记录请求时间节点
    Cookies             # 
    

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

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

相关文章

2024年8月31日历史上的今天大事件早读

1449年8月31日 明朝“土木之变” 1907年8月31日 英、法、俄三国协约形成 1914年8月31日 “骆派”京韵大鼓的创建者骆玉笙诞生 1916年8月31日 蔡锷东渡日本养病 1935年8月31日 美国通过《中立法案》 1937年8月31日 日本华北方面军成立 1941年8月31日 晋察冀边区完成民主大…

2024最新最全:国内外人工智能AI工具网站大全!

国内外人工智能AI工具网站大全(一键收藏,应有尽有) 摘要一、AI写作工具二、AI图像工具 2.1、常用AI图像工具2.2、AI图片插画生成2.3、AI图片背景移除2.4、AI图片无损调整2.5、AI图片优化修复2.6、AI图片物体抹除 三、AI音频工具四、AI视频工…

南京观海微电子----CMOS门电路(OD门、传输门、双向模拟开关、三态门)

【 1. MOS管】 MOS管:绝缘栅型场效应管。 【 2. CMOS电路】 当NMOS管和PMOS管成对出现在电路中,且二者在工作中互补,称为CMOS管(Complementary Metal-Oxide-Semiconductor)。 电路结构 拉电流 如下图所示,输入低电平&#xff…

王者荣耀 设置游戏头像 不用微信头像

我们在微信 我 选择 设置 在里面找到 个人信息与权限 如果找不到看看有木有一个叫隐私的选项 点击 进入之后 选择授权管理 找到王者荣耀 然后点击右侧的小箭头进入 点击下面的 解除授权 确认一下 解除授权 然后重新打开王者 选择微信登录 我们这里 选择新建昵称头像 选…

线性代数之线性方程组

目录 线性方程组 1. 解的个数 齐次线性方程组: 非齐次线性方程组: 2. 齐次线性方程组的解 3. 非齐次线性方程组的解 4. 使用 Python 和 NumPy 求解线性方程组 示例代码 齐次线性方程组 非齐次线性方程组 示例结果 齐次线性方程组 非齐次线性…

Unity获取SceneView尺寸

获取SceneView尺寸 var sceneView SceneView.lastActiveSceneView; var size new Vector2(sceneView.position.width,sceneView.position.height);

Elasticsearch学习(1)-mac系统安装elasticsearch基础

Elasticsearch基础 1. 传统数据库与elasticsarch2. 下载Elasticsearch7. 经过上述所有操作,就可以得到一个具体的连接可视化页面3. 安装kibana4. 其余知识点 elasticsearch是什么? Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能…

sql-labs靶场(41-50)

四十一 1.查看数据库名 ?id-1 union select 1,2,database()-- 2.查看表名 ?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- 3.查看user表列名 ?id-1 union select 1,group_concat(column_name),3 from…

SpringMVC处理流程介绍

SpringMVC请求处理流程 发起请求到前端控制器(DispatcherServlet)前端控制器请求HandlerMapping查找Handler(可以根据xml配置,注解进行查找) 对应Spring源码 //在类DispatcherServlet里面 protected void doDispatch(HttpServletRequest request, HttpServletResponse respon…

Leetcode102二叉树的层序遍历(java实现)

今天分享的题目是lee102题,题目的描述如下: 可能做到这道题的小伙伴写过其他关于二叉树的题目,但是一般是使用递归的方式做一个深度遍历,而层序遍历我们该如何做呢? 解题思路:使用一个队列来记录本层节点&a…

浅谈新能源汽车充电桩安装以及防范

摘要:随着国家对绿色环保的倡导,新能源电动汽车应运而生,它们采用清洁能源替代传统能源,有效避免了对自然环境的污染,并减少了资源消耗,实现了资源的高效利用。新能源电动汽车的普及降低了使用成本&#xf…

Rust Linux开发人员自比道路建设者和寻路者的区别

红帽公司(Red Hat)的长期直接渲染管理器(Direct Rendering Manager,DRM)子系统维护者大卫-艾尔里(David Airlie)撰写了一篇有趣的博文,将开发人员的类型与筑路工人、寻路者与酒店进行…

800G OSFP光模块发展概述

在快速发展的高速网络领域,800G OSFP光模块的演变象征着创新与进步。自诞生以来,800G OSFP光模块凭借哪些独特优势脱颖而出?本文将重点介绍800G OSFP光模块的发展路径。 800G OSFP光模块发展路径 路径一:EML 路由 800G DR8 OSF…

Python进阶07-高级语法

零、文章目录 Python进阶07-高级语法 1、with语句 (1)文件操作 文件使用完后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的 # 第一步:打开文件 f open(python.txt…

另一种关于类的小例

前言 我们还是以一段关于构造函数的代码作为开端,我们以之前银行家的小项目为背景 class Account {constructor(owner, currency, pin) {this.owner owner;this.currency currency;this.pin pin;} }const ITshare new Account(ITshare, EUR, 21211); console.…

堆垛机及AGV能力计算

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载。 这份文件是关于堆垛机和AGV(…

第六课,模运算进阶,计算机存储单位

一,模运算的进阶知识 先复习一下已知的模运算知识: ①符号是%,但作为模运算符号时应念作“模”而非“百分之”或“百分号” ②参与模运算的数必须是两个整数,其作用是计算余数 然后新学几个模运算知识: ③当被除数是…

IPv4和子网掩码

目录 IP地址: IP概念: 网络号与主机号: 网关与跨网通信: IP地址的分类: 子网掩码: 如何确定两个IP地址是否在同一网段; 练习: 补充: IP地址: IP概念&#xff1…

哪家宠物空气净化器能吸毛除臭?希喂、352真实测评分享

自从家里同时迎来了猫咪与狗狗,生活的色彩确实丰富了许多,但这份喜悦的背后,也有每天理都理不断的“盛况”。每当结束了一天的忙碌,满心期待着家的温馨与安宁,推开家门的那一刻,猫和狗先迎接我的反而是它们…

Python实战项目:天气数据爬取+数据可视化(完整代码)_python爬虫实战

一、选题的背景 随着人们对天气的关注逐渐增加,天气预报数据的获取与可视化成为了当今的热门话题,天气预报我们每天都会关注,天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…