网页请求的原理
网络爬虫请求网页的过程可以理解为用户使用浏览器加载网页的过程,这个过程其实是向Web服务器发送请求的过程,即浏览器向Web服务器发送请求,Web服务器会将响应内容以网页形式返回给浏览器。因此,了解浏览器与Web服务器之间的通信方式和交互过程,理解网页的组成、结构、分类、数据格式,能加深对网络爬虫的理解。本章将针对网页请求原理的相关知识进行讲解。
1.浏览器加载网页的过程
(1)浏览器通过域名系统(Domain Name System,DNS)服务器查找百度服务器对应的IP地址。
(2)浏览器向IP地址对应的Web服务器发送HTTP请求。
(3)Web服务器接收HTTP请求后进行处理,向浏览器返回HTML页面。
(4)浏览器对HTML页面进行渲染呈现给用户。
2.HTTP基础
2.1URL介绍
URL(全称Uniform Resource Locator)又称URL地址,表示统一资源定位符,用于指定因特网上某个资源的位置。URL地址的语法格式如下:
scheme://[user]:[password]@host:[port]/path;[params]?[query]#[frag]
URL地址语法格式中各个选项的说明:
选项 | 说明 |
---|---|
scheme | 表示方案,用于标识采用哪种传输协议访问服务器资源 |
user | 表示用户,用于标识访问服务器资源时需要的用户名 |
password | 表示密码,用户名后面可能要包含的密码,两者之间以”:”分隔 |
host | 表示主机地址,也就是存放资源的服务器主机名或IP地址 |
port | 表示端口号,也就是存放资源的服务器监听的端口号 |
path | 用于指定本次请求资源在服务器中的位置 |
params | 表示访问资源时使用的协议参数,参数之间以“;”分隔 |
query | 表示查询字符串,用于指定查询的资源,一般使用“?”与URL的其余部分进行分隔。查询字符串没有通用格式,它通常会以”&”连接多个参数,每个参数的名称与值使用“=”连接,如https://www.baidu.com/?ie=utf-8&wd=python |
frag | 表示片段,用于指定访问资源时某一部分资源的名称 |
(1)scheme选项用于规定如何访问指定资源的主要标识符,它会告诉负责解析URL的应用程序应该使用什么传输协议。
传输协议 | 说明 | 示例 |
---|---|---|
File | 访问本地计算机的资源 | file:///Users/itcast/Desktop/basic.html |
FTP | 文件传输协议,访问共享主机的文件资源 | ftp://ftp.baidu.com/movies |
HTTP | 超文本传输协议,访问远程网络资源 | http://bbs.itheima.com/template/gfquan/src/logo.png |
HTTPS | 安全的SSL加密传输协议,访问远程网络资源 | https://image.baidu.com/channel/wallpaper |
Mailto | 访问电子邮件地址 | mailto:null@itcast.cn |
(2)host指存放资源的主机名或者IP地址,它用于标识互联网上的唯一一台计算机,保证用户在联网的计算机上可以高效地从成千上万台计算机中找到这台计算机。IP地址分为IPv4(互联网通信协议第4版)和IPv6(互联网协议第6版),目前较通用的IP地址是IPv4,它通常“点分十进制”表示成“a.b.c.d”的形式,并通过DNS服务将域名和IP地址相互映射,比如.baidu.com就是202.108.22.5对应的域名。
(3**)port用于标识在一台计算机上运行的不同程序,它与主机地址以“:”进行分隔**。每个网络程序都对应一个或多个特定的端口号,例如,采用HTTP协议的程序默认使用的端口号为80,采用HTTPS协议的程序默认使用的端口号为443。
(4)path是由0个或多个“/”符号隔开的字符串,一般用于指定本次请求的资源在服务器中的位置。
2.2.HTTP和HTTPS
对于网络爬虫来说,它采集的页面通常使用的是HTTP协议和HTTPS协议。
HTTP协议全称为超文本传输协议(Hyper Text Transfer Protocol),它用于将Web服务器的超文本资源传送到浏览器中。
HTTP协议能够高效、准确地传送超文本资源,但浏览器与Web服务器的连接是一种一次性连接,它限制每次连接只能处理一个请求。这意味着每个请求都是独立的,服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。
HTTPS协议全称为超文本传输安全协议(Hyper Text Transfer Protocol Secure),该协议在HTTP协议基础上添加了安全套接字协议(Secure Sockets Layer,SSL),数据在传输过程中主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。
2.3HTTP请求格式
浏览器向Web服务器发送的信息是一个HTTP请求,每个HTTP请求由请求行、请求头部、空行以及**请求数据(**有的也称为请求体)这4个部分组成。
(1)请求行的内容具体如下。
GET /item/Python/407313 HTTP/1.1
在请求行中,GET表示向服务器请求网络资源时所使用的请求方法,/item/Python/407313表示请求的URL地址,HTTP/1.1表示使用的HTTP版本。
常用的请求方法包括GET和POST,其中GET用于请求服务器发送某个资源,POST用于向服务器提交表单或上传文件,表单数据或文件的数据会包含在请求体中。请求方法GET和POST的区别主要体现两个方面。
(2)请求头
请求行紧挨的部分就是若干个请求头信息,请求头主要用于说明服务器要使用的附加信息。
Host:用于指定被请求资源的服务器主机名和端口号。
User-Agent:用于标识客户端身份,通常页面会根据不同的User-Agent信息自动做出适配,甚至返回不同的响应内容。
Accept:用于指定浏览器或其他客户端可以接受的MIME文件类型,服务器可以根据该字段判断并返回适当的文件格式。
Referer:用于标识当前请求页面的来源页面地址,即表示当前页面是通过此来源页面里的链接进入的。
Accept-Charset:用于指定浏览器可以接受的字符集类型。
Cookie:用于在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现模拟登录。
Content-Type:用于指出实体内容的MIME类型。
2.4HTTP响应格式
Web服务器发送给浏览器的响应信息由4个部分组成,分别是状态行、响应头、空行、以及响应正文。
状态行的内容具体如下。
HTTP/1.1 200 OK
在状态行中,HTTP/1.1表示HTTP协议的版本号,200表示响应状态码,OK表示响应状态码的简短描述。
响应状态码代表服务器的响应状态,它的作用是告知浏览器请求Web资源的结果,如请求成功、请求异常、服务器处理错误等。
响应状态码 | 说明 |
---|---|
100~199 | 表示服务器成功接收部分请求,要求浏览器继续提交剩余请求才能完成整个处理过程 |
200~299 | 表示服务器成功接收请求并已完成整个处理过程。常见状态码为200,表示Web服务器成功处理了请求 |
300~399 | 表示未完成请求,要求浏览器进一步细化请求。常见的状态码有302(表示请求的页面临时转移至新地址)、307(表示请求的资源临时从其他位置响应)和304(表示使用缓存资源) |
400~499 | 表示浏览器发送了错误的请求,常见的状态码有404(表示服务器无法找到被请求的页面)和403(表示服务器拒绝访问,权限不够) |
500~599 | 表示Web服务器出现错误,常见的状态码为500,表示本次请求未完成,原因在于服务器遇到不可预知的情况 |
状态行下面的部分便是若干个响应头信息,关于响应头中的常用字段以及常用值的介绍如下。
响应正文是服务器返回的具体数据,常见的数据是HTML源代码。浏览器在接收到HTTP响应后,会根据响应正文的不同类型进行不同的处理。如果响应正文是DOC文档,这时浏览器会借助安装在本机的Word程序打开这份文档;如果响应正文是RAR压缩文档,这时浏览器会弹出一个下载窗口让用户下载解压软件;如果响应正文是HTML文档,这时浏览器会在自身的窗口中展示该文档。
,会根据响应正文的不同类型进行不同的处理。如果响应正文是DOC文档,这时浏览器会借助安装在本机的Word程序打开这份文档;如果响应正文是RAR压缩文档,这时浏览器会弹出一个下载窗口让用户下载解压软件;如果响应正文是HTML文档,这时浏览器会在自身的窗口中展示该文档。