| |
|
开发:
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等信息,服务器会根据请求头里的信息判断请求是否合法,进而做出对应的响应。
分为四部分内容:请求方法(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提交数据方式的关系:
在爬虫中,构造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网页基础
网页可以分为三大部分——HTML、CSS和JavaScript。
一个网页的标准形式是html标签内嵌套head标签和body标签,head标签内定义网页的配置和引用,body标签定义网页的正文。
DOM是文档对象模型,它定义了访问HTML和XML文档的标准。HTML文档中的所有内容都是节点。 #整个网站文档是一个文档节点。 #每个html标签对应一个根节点。 #节点内的文本是文本节点,比如a节点代表一个超链接,它内部的文本也被认为是一个文本节点。 #每个节点的属性是属性节点,比如a节点有一个href属性,它就是一个属性节点。 #注释是注释节点,在HTML中有个特殊的语法会被解析为注释,它也会对应一个节点。 因此,HTML DOM将HTML文档视作树结构,这种结构被称为节点树。 通过HTML DOM,节点树中的所有节点均可通过JavaScript访问,所有HTML节点元素均可可被修改、创建或删除。 节点树中的节点彼此拥有层级关系。我们常用父、子和兄弟等术语描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。 在节点树中,顶端节点称为根。除了根节点外,每个节点都有父节点,同时可以拥有任意数量的子节点和兄弟节点。
使用CSS选择器来定位节点。例如假设一个div节点的id为container,哪门这个节点就可以表示为#container,如果想选择class为wrapper的节点,则可以使用.wrapper,这里以.开头代表选择class,其后紧跟的是class的名称。除此外还有一种选择方式,就是根据标签名。例如想选择二级标题,直接用h2。 ??????????????1.3?爬虫的基本原理
爬虫就是获取网页并提取和保存信息的自动化程序。分为获取网页,提取信息和保存程序三步。
最常见的是HTML源代码,还有JSON字符串,各种二进制数据,如图片、音频和视频等,还有各种扩展名文件,如CSS、JavaScript和配置文件等。
现在越来越多的网页采用的是Ajax、前端模块化工具构建的,可能整个网页都是JavaScript渲染出来的。对于这样的情况,可以分析源代码后台Ajax接口,也可使用Selenium、Splash、Pyppeteer、Playwright这样的库来模拟JavaScript渲染。 ??????????????1.4?Session和Cookie
静态网页就是全部由HTML编写的网页。 动态网页可以动态解析URL中参数的变化,关联数据库并动态呈现不同的页面内容。可能由JSP、PHP、ASP、Python等语言编写。
HTTP的无状态是指HTTP协议对事务处理是没有记忆能力的,或者说服务器并不知道客户端处于什么状态,服务器缺少状态纪录。而Session和Cookie就是用于保持HTTP连接状态的技术。Session在服务端保存用户的Session信息;Cookie在客户端,也就是浏览器端,有了Cookie。浏览器在下次访问相同网页时就会自动附带上它,并发送给服务器,服务器通过识别Cookie鉴定出是哪个用户在访问,然后判断此用户是否处于登录状态,并返回相应的响应。
中文称之为会话,在Web中,Session对象用来存储特定用户Session所需的属性和配置信息。
指某些网站为了鉴别用户身份、进行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。
线程是操作系统进行运算调度的最小单位,是进程中的最小运行单元。 多线程就是一个进程中同时执行多个线程。 并发和并行:并发是指多个线程对应的多条指令被快速轮换地执行。并行指同一时刻有多条指令在多个处理器上同时执行,这意味着并行必须依赖多个处理器。 多线程适用于IO密集型任务,不适用于计算密集型任务。 进程就是线程的集合,进程是由一个或多个线程构成的,是具有一定独立功能的程序在某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。 Python中GIL的限制导致不论是在单核还是多核条件下,同一时间只能运行一个线程。GIL为全局解释器锁,每个线程要想执行,必须先拿到GIL。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 10:29:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |