IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 《Python3网络爬虫开发实战》第一章爬虫基础 -> 正文阅读

[网络协议]《Python3网络爬虫开发实战》第一章爬虫基础

1.1?HTTP基本原理

1、URL基本格式

scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]

scheme:即protocol,协议。

username、password:用户名和密码。

hostname:主机地址。可以是域名或IP地址。

port:端口。http默认端口80,https默认端口443。

path:路径。指网络资源在服务器中的指定地址。

parameters:参数。指定访问某个资源时的附加信息。

query:查询。用来查询某类资源,如果有多个查询,用&隔开。

fragment:片段。资源内部的书签。

2、HTTP和HTTPS

HTTPS是在HTTP协议的基础上加入SSL层,通过该协议传输的内容都是经过HTTPS加密的。

3、HTTP请求过程

在浏览器按下F12后出现Network监听组件,了解HTTP请求过程,各列的含义如下:

Name:请求的名称。

Status:响应的状态码,200代表正常。

Protocol:请求的协议类型。http/1.1代表HTTP1.1版本,h2代表HTTP2.0版本。

Type:请求的文档类型。document代表请求的是一个HTML文档。

Initiator:请求源。用来标记请求是由哪个对象或进程发起的。

Size:从服务器下载的文件或请求的资源大小。

Time:从发起请求到获取响应所花的总时间。

Waterfall:网络请求的可视化瀑布流。

单击条目,看到更详细的信息。

首先是General部分,RequestURL为请求的URL,RequestMethod为请求的方法,StatusCode为响应状态码,Remote Address为远程服务器的地址和端口,Referrer Policy为Referrer判别策略。

Response Headers代表响应头。响应头包含服务器的类型、文档类型、日期等信息,浏览器在接收到响应后,会对其进行解析,进而呈现网页内容。

Requests Headers代表请求头。请求头中包含如浏览器标识、Cookies、Host等信息,服务器会根据请求头里的信息判断请求是否合法,进而做出对应的响应。

  1. 请求

分为四部分内容:请求方法(Request Method)、请求的地址(Request URL)、请求头(Request Headers)、请求体(Request Body)。

请求方法(Request Method):用于标识请求客户端请求服务端的方式,常见的请求方法有:GET和POST。

GET和POST的区别:

#GET请求中的参数包含在URL里面,数据可以再URL中看到:而POST请求的URL不会包含这些数据,数据都是通过表单形式传输,不会体现在URL里。

#GET请求提交的数据最多只有1024字节,POST方式则没有限制。

请求的地址(Request URL):可以唯一确定客户端想请求的资源。

请求头(Request Headers):用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、User-Agent等。

Accept:请求报头域,用于指定客户端课接受哪些类型的信息。

Accept-Language:用于指定客户端可接受的语言类型。

Accept-Encoding:用于指定客户端可接受的内容编码。

Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。

Cookie:网站为了辨别用户,进行会话跟踪而存储在用户本地的数据,主要功能是维持当前访问会话。

Referer:用于标识请求是从哪个页面发过来的,服务器可以拿到这些信息并做来源统计、防盗链处理等相应的处理。

User-Agent:可以使服务器识别客户端使用的操作系统及版本、浏览器及版本等信息。做爬虫时如果加上此信息,可以伪装为浏览器。如果不加,很可能会被识别。

Content-Type:也叫互联网媒体类型或MIME类型,用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型。

请求头是请求的重要组成部分,在写爬虫时,通常都需要设定请求头。

请求体(Request Body):一般是POST请求中的表单数据,对于GET请求,请求体为空。登录之前,需要先填写用户名和密码信息,登录时这些内容会以表单数据的形式提交给服务器,此时需要注意请求头中指定Content-Type为application/x-www-form-urlencoded。只有这样设置Content-Type,内容才会一表单数据的形式提交。

Content-Type与POST提交数据方式的关系:

application/x-www-form-urlencoded

表单数据

multipart/form-data

表单文件上传

application/json

序列化JSON数据

text/xml

XML数据

在爬虫中,构造POST请求需要使用正确的Content-Type,并了解设置各种请求库的各个参数时使用的是哪种Content-Type。

5、响应

响应状态码:表示服务器的响应状态,如200代表服务器正常响应、404代表页面未找到、500代表服务器内部发生错误。

响应头:包含了服务器对请求的应答信息。下面是一些常用的响应头信息。

Date:用于标识响应产生的时间。

Last-Modified:用于指定资源的最后修改时间。

Content-Encoding:用于指定响应内容的编码。

Server:包含服务器的信息,例如名称、版本号等。

Content-Type:文档类型,指定返回的数据是什么类型,如text/html代表返回HTML文档,application/x-javascript代表返回JavaScript文件,image/jpeg代表返回图片。

Set-Cookie:设置Cookie。响应头中的Set-Cookie用于告诉浏览器需要将此内容放在Cookie中,下次请求时将Cookie携带上。

Expires:用于指定响应的过期时间,可以让代理服务器或浏览器将加载的内容更新到缓存中。

响应体:响应的正文数据都存在响应体中,例如请求网页时,响应体就是网页的HTML代码;请求一张图片时,响应体就是图片的二进制数据。我们做爬虫请求网页时,要解析的内容就是响应体。

6、HTTP2.0

二进制分帧层:HTTP2.0将HTTP协议通信分解为二进制编码帧的交换,这些帧对应着特定数据流中的消息,所有这些都在一个TCP连接内复用,这是HTTP2.0协议所有其他功能和性能优化的基础。

多路复用:HTTP2.0不再以TCP连接的方式去实现多路并行,客户端和服务器可以将HTTP消息分解为互不依赖的帧,然后交错发送,最后再在另一端把它们组装起来,达到以下效果。

#并行交错地发送多个请求,请求之间互不影响。

#并行交错地发送多个响应,响应之间互不干扰。

#使用一个连接并行发送多个请求和响应。

#不必再为绕过HTTP1.X限制而做很多工作。

#消除不必要的延迟和提高现有网络容量的利用率,从而减少页面加载时间。

流控制:一种阻止发送方向接收方发送大量数据的机制,以免超出后者的需求或处理能力。

服务端推送:HTTP2.0新增服务端对一个客户端请求发送多个响应。即除了对最初请求的响应之外,服务器还可以向客户端推送额外资源,而无需客户端明确地请求。

???????1.2?Web网页基础

  1. 网页的组成

网页可以分为三大部分——HTML、CSS和JavaScript。

  1. 网页的结构

一个网页的标准形式是html标签内嵌套head标签和body标签,head标签内定义网页的配置和引用,body标签定义网页的正文。

  1. 节点树及节点间的关系

DOM是文档对象模型,它定义了访问HTML和XML文档的标准。HTML文档中的所有内容都是节点。

#整个网站文档是一个文档节点。

#每个html标签对应一个根节点。

#节点内的文本是文本节点,比如a节点代表一个超链接,它内部的文本也被认为是一个文本节点。

#每个节点的属性是属性节点,比如a节点有一个href属性,它就是一个属性节点。

#注释是注释节点,在HTML中有个特殊的语法会被解析为注释,它也会对应一个节点。

因此,HTML DOM将HTML文档视作树结构,这种结构被称为节点树。

通过HTML DOM,节点树中的所有节点均可通过JavaScript访问,所有HTML节点元素均可可被修改、创建或删除。

节点树中的节点彼此拥有层级关系。我们常用父、子和兄弟等术语描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。

在节点树中,顶端节点称为根。除了根节点外,每个节点都有父节点,同时可以拥有任意数量的子节点和兄弟节点。

  1. 选择器

使用CSS选择器来定位节点。例如假设一个div节点的id为container,哪门这个节点就可以表示为#container,如果想选择class为wrapper的节点,则可以使用.wrapper,这里以.开头代表选择class,其后紧跟的是class的名称。除此外还有一种选择方式,就是根据标签名。例如想选择二级标题,直接用h2。

??????????????1.3?爬虫的基本原理

  1. 爬虫概述

爬虫就是获取网页并提取和保存信息的自动化程序。分为获取网页,提取信息和保存程序三步。

  1. 能爬怎样的数据

最常见的是HTML源代码,还有JSON字符串,各种二进制数据,如图片、音频和视频等,还有各种扩展名文件,如CSS、JavaScript和配置文件等。

  1. JavaScript渲染的页面

现在越来越多的网页采用的是Ajax、前端模块化工具构建的,可能整个网页都是JavaScript渲染出来的。对于这样的情况,可以分析源代码后台Ajax接口,也可使用Selenium、Splash、Pyppeteer、Playwright这样的库来模拟JavaScript渲染。

??????????????1.4?Session和Cookie

  1. 静态网页和动态网页

静态网页就是全部由HTML编写的网页。

动态网页可以动态解析URL中参数的变化,关联数据库并动态呈现不同的页面内容。可能由JSP、PHP、ASP、Python等语言编写。

  1. 无状态HTTP

HTTP的无状态是指HTTP协议对事务处理是没有记忆能力的,或者说服务器并不知道客户端处于什么状态,服务器缺少状态纪录。而Session和Cookie就是用于保持HTTP连接状态的技术。Session在服务端保存用户的Session信息;Cookie在客户端,也就是浏览器端,有了Cookie。浏览器在下次访问相同网页时就会自动附带上它,并发送给服务器,服务器通过识别Cookie鉴定出是哪个用户在访问,然后判断此用户是否处于登录状态,并返回相应的响应。

  1. Session

中文称之为会话,在Web中,Session对象用来存储特定用户Session所需的属性和配置信息。

  1. Cookie

指某些网站为了鉴别用户身份、进行Session跟踪而存储在用户本地终端上的数据。

Session维持:Cookie和Session需要配合,一个在客户端,一个在服务端,二者共同协作,就实现了登录控制。

属性结构:Cookie具有如下几个属性。

Name:Cookie的名称。

Value:Cookie的值。如果值为Unicode字符,需要字符编码。如果值为二进制数据,需要BASE64编码。

Domain:指定可以访问该Cookie的域名。

Path:Cookie的使用路径。

Max-Age:Cookie失效的时间,单位为秒,长和Expire一起使用,通过此属性可以计算出Cookie的有效时间。Max-Age如果为正数,则表示Cookie在Max-Age秒后失效;如果为负数,则表示Cookie在关闭浏览器时失效,而且浏览器不会以任何形式保存该Cookie。

Size:Cookie的大小。

HTTP:Cookie的httponly属性。若此属性为true,则只有在HTTHeaders中才会带有此Cookie信息,而不能通过document.cookie来访问此Cookie。

Secure:是否允许使用安全协议传输Cookie。安全协议有HTTPS和SSL等,使用这些协议在网络上传输数据之前会先将数据加密。默认为false。

??????????????1.5?代理的基本原理

代理实际上就是指代理服务器,功能是代网络用户取得网络信息。

代理的作用:

#突破自身IP的限制,访问一些平时不能访问的站点。

#访问一些单位或团体的内部资源。

#提高访问速度。

#隐藏真实IP。

    1. 多线程和多进程的基本原理

线程是操作系统进行运算调度的最小单位,是进程中的最小运行单元。

多线程就是一个进程中同时执行多个线程。

并发和并行:并发是指多个线程对应的多条指令被快速轮换地执行。并行指同一时刻有多条指令在多个处理器上同时执行,这意味着并行必须依赖多个处理器。

多线程适用于IO密集型任务,不适用于计算密集型任务。

进程就是线程的集合,进程是由一个或多个线程构成的,是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。

Python中GIL的限制导致不论是在单核还是多核条件下,同一时间只能运行一个线程。GIL为全局解释器锁,每个线程要想执行,必须先拿到GIL。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:19:48  更:2021-12-14 16:20:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 7:15:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码