爬虫学习(01):了解爬虫超文本传输协议的理解

2023-12-19 12:40

本文主要是介绍爬虫学习(01):了解爬虫超文本传输协议的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    • 一、爬虫入门
    • 二、web请求过程(百度为例)
      • 2.1 页面渲染
        • 1. 服务器渲染 -> 数据直接在页面源代码里能搜到
        • 2. 前端JS渲染 -> 数据在页面源代码里搜不到
    • 三、浏览器工具的使用(重点)
      • 1. Elements
      • 2. Console
      • 3. Source
      • 4. Network
    • 四、超文本传输协议
      • 请求:
      • 响应:
      • https协议
        • 加密方法(三种)
          • 1. 对称密钥加密
          • 2. 非对称密钥加密
          • 3. 证书密钥加密
    • 五、总结

一、爬虫入门

什么是爬虫?

就是我们总是希望能够保存互联网上的一些重要的数据信息为己所用.
比如:

  • 在浏览到一些优秀的让人血脉喷张的图片时. 总想保存起来留为日后做桌面上的壁纸
  • 在浏览到一些重要的数据时(各行各业), 希望保留下来日后为自己进行各种销售行为增光添彩
  • 在浏览到一些奇奇怪怪的劲爆视频时, 希望保存在硬盘里供日后慢慢品鉴
  • 在浏览到一些十分优秀的歌声曲目时, 希望保存下来供我们在烦闷的生活中增添一份精彩

需要注意的是:爬取的一定是能看见的东西, 公开的一些东西.

爬虫的矛与盾

反爬机制:

  • 门户网站,可以通过制定相应的策略或者技术手段(加密),防止爬虫程序进行网站数据的爬取。

反反爬策略(JS逆向):

  • 爬虫程序可以通过制定相关的策略或者技术手段破解门户网站中具备的反爬机制,从而可以获取门户网站中相关的数据。
robots.txt协议:百度蜘蛛

俗称君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。只要在每个网站后缀加robots.txt就好了

这是淘宝网站的君子协议这是淘宝网站的君子协议

二、web请求过程(百度为例)

在访问百度的时候, 浏览器会把这一次请求发送到百度的服务器(百度的一台电脑), 由服务器接收到这个请求, 然后加载一些数据. 返回给浏览器, 再由浏览器进行显示. 需要注意的是, 百度的服务器返回给浏览器的不直接是页面, 而是页面源代码(由html, css, js组成). 由浏览器把页面源代码进行执行, 然后把执行之后的结果展示给用户. 所以我们能看到百度的源代码(就是那堆看不懂的鬼东西). 具体过程如图.
在这里插入图片描述

2.1 页面渲染

这里需要注意的是,不是所有的数据都是在页面源代码上的,有些是通过js等工具动态加载进来的,这就是页面渲染数据的过程, 我们常见的页面渲染过程有两种,一种叫做服务器渲染,另外一种叫做前端JS渲染

1. 服务器渲染 -> 数据直接在页面源代码里能搜到

我们在请求到服务器的时候, 服务器直接把数据全部写入html中, 我们浏览器就能直接拿到带有数据的html内容.
由于数据是直接写在html中的, 所以我们能看到的数据都在页面源代码中能找的到的.
这种网页一般都相对比较容易就能抓取到页面内容

2. 前端JS渲染 -> 数据在页面源代码里搜不到

这种就稍显麻烦了. 这种机制一般是第一次请求服务器返回一堆HTML框架结构. 然后再次请求到真正保存数据的服务器, 由这个服务器返回数据, 最后在浏览器上对数据进行加载. 就像这样:
在这里插入图片描述
那数据是何时加载进来的呢? 其实就是在我们进行页面向下滚动的时候, jd就在偷偷的加载数据了, 此时想要看到这个页面的加载全过程, 我们就需要借助浏览器的调试工具了(F12)
在这里插入图片描述
所以当你在页面源代码中找不到页面显示出来的数据的时候,可以在调试工具(F12)中寻找左侧相关的数据包,数据就藏在数据包里(记得先打开F12调试工具,再刷新页面,不然数据已经加载完毕,则数据包中没有内容)

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

浏览器是最能直观的看到网页情况以及网页加载内容的地方. 我们可以按下F12来查看一些普通用户很少能使用到的工具.
在这里插入图片描述
其中, 最重要的Elements, Console, Sources, Network前四个

1. Elements

Elements是我们实时的网页内容情况,有时候并不是页面源代码,前端JS渲染的内容也会在这上面呈现。所以这个是实时的网页内容情况

注意,

  1. 页面源代码是执行js脚本以及用户操作之前的服务器返回给我们最原始的内容
  2. Elements中看到的内容是js脚本以及用户操作之后的当时的页面显示效果.

你可以理解为, 一个是老师批改之前的卷子,一个是老师批改之后的卷子. 虽然都是卷子. 但是内容是不一样的. 而我们目前能够拿到的都是页面源代码. 也就是老师批改之前的样子. 这一点要格外注意.

Elements中我们可以使用左上角的小箭头.可以直观的看到浏览器中每一块位置对应的当前html状况. 还是很贴心的.
在这里插入图片描述

2. Console

第二个窗口, Console是用来查看程序员留下的一些打印内容, 以及日志内容的. 我们可以在这里输入一些js代码自动执行.
在这里插入图片描述

3. Source

第三个窗口, Source, 这里能看到该网页打开时加载的所有内容. 包括页面源代码. 脚本. 样式, 图片等等全部内容.
在这里插入图片描述

4. Network

第四个窗口, Network, 我们一般习惯称呼它为抓包工具. 就是刚才讲的前端JS渲染就是在这里看到的, 我们能看到当前网页加载的所有网络请求, 以及请求的详细内容. 这一点对我们爬虫来说至关重要.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、超文本传输协议

协议: 就是两个计算机之间为了能够流畅的进行沟通而设置的一个君子协定. 常见的协议有TCP/IP. SOAP协议, HTTP协议, SMTP协议等等…

不同的协议. 传输的数据格式不一样.

HTTP协议, Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议. 直白点儿, 就是浏览器和服务器之间的数据交互遵守的就是HTTP协议.

HTTP协议用的最多的是加载网页.

HTTP协议把一条消息分为三大块内容. 无论是请求还是响应都是三块内容

请求:

请求行 -> 请求方式(get/post) 请求url地址 协议
请求头 -> 放一些服务器要使用的附加信息(cookie验证,token,各式各样的反扒信息)请求体 -> 一般放一些请求参数

响应:

状态行 -> 协议 状态码 
响应头 -> 放一些客户端要使用的一些附加信息(cookie验证,token,各式各样的反扒信息)响应体 -> 服务器返回的真正客户端要用的内容(HTML,json)等 页面代码

在写爬虫的时候要格外注意请求头和响应头. 这两个地方一般都隐含着一些比较重要的内容

注意, 浏览器实际上把 HTTP的请求和响应的内容进行重组了. 显示成我们更容易阅读的效果.

在这里插入图片描述

请求头中最常见的一些重要内容(爬虫需要):

  1. User-Agent : 请求载体的身份标识(用啥发送的请求)
  2. Referer: 防盗链(这次请求是从哪个页面来的? 反爬会用到)
  3. cookie: 本地字符串数据信息(用户登录信息, 反爬的token)
  4. Content-Type:服务器响应回客户端的数据类型(str,json等类型)

响应头中一些重要的内容:

  1. cookie: 本地字符串数据信息(用户登录信息, 反爬的token)
  2. 各种神奇的莫名其妙的字符串(这个需要经验了, 一般都是token字样, 防止各种攻击和反爬)

https协议

http协议几乎相同,s表示安全,表示安全的超文本传输协议。(数据加密)

加密方法(三种)
1. 对称密钥加密

指客户端会先将即将发送给服务器端的数据进行数据加密加密的方式是由客户端自己指定的,加密完毕之后,将密文包括解密的方式(密钥)一块发送给服务器端,服务器端接收到了密钥和加密的密文数据之后,会使用密钥将密文数据进行解密,最后服务器端会获得原文数据

弊端
  • 在进行密钥和密文数据传输的过程中,很有可能会被第三方机构拦截到,可能存在数据暴露的风险
    在这里插入图片描述
2. 非对称密钥加密

针对对称加密的安全隐患,进行改良的加密方法,在使用的时候有两把锁,一把叫做“私有密钥”,一把是“公开密钥”,使用非对象加密的加密方式的时候,服务器首先告诉客户端按照自己给定的公开密钥进行加密处理,客户端按照公开密钥加密以后,服务器接收到信息再通过自己的私有密钥进行解密,这样做的好处就是解密的钥匙根本就不会进行传输,因此也就避免了被挟持的风险。就算公开密钥被窃听者拿到,它也很难进行解密,因为解密过程是对离散对数求值,这可不是轻而易举能做到的事。

缺点:
  • 1.效率比较低,处理起来更加复杂,通信过程中使用就有一定的效率问题而影响通信速度
  • 2.只要是发送密钥,就有可能有被挟持的风险,如果中间机构将公钥篡改,再发送给客户端,这样就不能保证客户端拿到的公钥一定是由服务器所创建的。

在这里插入图片描述

3. 证书密钥加密

针对非对称密钥加密的缺陷,我们没法保证客户端所拿到的公钥一定是由服务器端所创建的,引入证书密钥加密。
服务器的开发者携带公开密钥向数字证书认证机构提出公开密钥的申请,数字证书认证机构在认清申请者的身份,审核通过以后,会对开发者申请的公开密钥做数字签名,然后分配这个已经签名的公开密钥,并将密钥放在证书里面,绑定在一起。
服务器将这份数字证书发送给客户端,因为客户端也认可证书机构,客户端通过数字证书中的数字签名来验证公钥的真伪,来确保服务器传过来的公开密钥是真实的。一般情况下,证书的数字签名很难被伪造的,这取决于认证机构的公信力。一旦确认信息无误之后,客户端就会通过公钥对报文进行加密发送服务器接收到以后用自己的私钥进行解密
​​在这里插入图片描述

五、总结

  1. 你要的东西在页面源代码. 直接拿源代码提取数据即可
  2. 你要的东西,不在页面源代码, 需要想办法找到真正的加载数据的那个请求. 然后提取数据
  3. 注意遵守君子协定
  4. 请求头中常见的内容:User-Agent, referer, cookie, Content-Type

这篇关于爬虫学习(01):了解爬虫超文本传输协议的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512193

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、