2.2.1请求-响应式协议
HTTP协议是一种请求-响应式协议,客户端发起一个http请求,服务端再对请求作出响应。浏览器就是一种HTTP客户端,我们之所以能打开浏览器上网,是因为浏览器通过HTTP协议向远程的HTTP服务器请求了网页,音频,视频等数据。
学习网络爬虫,需要先掌握HTTP协议。在掌握了HTTP协议的基础上,再通过代码来模拟HTTP客户端的请求过程,这样才能抓取到数据。现在以用户通过浏览器访问网页为例,来理解http的请求-响应过程:
(1) 打开浏览器,在浏览器中输入某网页的url
(2) 浏览器对url进行解析,会得到一个IP地址和端口号,如果url中未出现端口号,那么浏览器会使用http协议的默认端口号:80
(3) 浏览器根据IP地址与端口号,与服务端建立一个TCP连接
(4) TCP连接建立成功以后,浏览器发起一个http请求
(5) http服务器收到该请求,对请求进行解析,再将网页等数据响应给浏览器
(6) 浏览器对服务端响应的HTML,CSS, JS等文件进行解析、渲染,用户最终看到了网页内容
2.2.2 HTTP协议中的URL
URL是统一资源定位符,HTTP协议使用URL来进行资源的定位。HTTP URL的常用格式如下:http://<host>:<port>/<path>?<query>
(1) host表示主机的域名或IP地址,通过DNS系统,可以将域名解析为对应的IP地址
(2) http协议基于TCP协议来进行数据的可靠传输,port表示tcp连接的端口号。端口号可以省略,此时将使用http协议的默认端口号:80
(3) path表示资源在服务器主机中的路径, 以"/"符号进行路径的连接
(4) query表示查询字符串。<path>和<query>都是可选的。如果<path>和<query>部分都没有,则"/"也可以省略
query的基本格式:name1=value1&name2=value2,query中的name=value,表示请求中携带的参数,name表示参数名,value为参数值, &用来对参数进行分隔。
URL实例:
该URL表示请求服务端的HTML文件index.html, 网页语言为英文。在该url实例中,host为www.chipscoco.com, port为http协议默认的端口80, path是/index.html, 表示服务器根目录下的index.html文件。请求参数为language, 参数值为en,表示英语。
2.2.3 HTTP协议中的请求方法
http协议是一种请求-响应式的协议,在对资源进行请求时,需要使用特定的请求方法。http协议常见的请求方法见下表:
http协议常见的请求方法
| 描述 |
GET | 幂等请求,表示获取服务器上的资源,使用get请求时,请求参数会在URL中进行体现。 |
POST | 非幂等请求,表示向服务器提交资源,以让服务器进行处理,请求参数不会出现在URL中,而是出现在请求体中。从语义上来说,post请求是作为一种写操作,而get请求则作为读操作,读操作容易被浏览器缓存。 |
PUT | 幂等请求,与POST请求类似,表示对服务器的资源进行更新,如果服务器上无此资源,会先进行创建。 |
DELETE | 幂等请求,表示对服务器的特定资源进行删除 |
幂等请求:即执行任意多次的请求与只执行一次请求的影响是相同的。get请求是读操作,对同一份资源执行多次get请求都不会对服务器产生副作用。delete请求在语义上表示对资源进行删除,对同一份资源删除一次或删除多次的效果是一样的。post请求侧重于创建新资源,执行多次post请求会创建多个资源对象,而put请求只创建一次,然后每次都是对同一份资源进行更新。
开发爬虫程序需要经常模拟GET请求和POST请求,读者在学习HTTP协议时,先重点掌握URL的语义,基本格式,然后根据实际情况对特定的URL发起GET或POST请求。
获取页面数据,通常是GET请求,而通过爬虫模拟登录,发起的则是POST请求。
2.2.4 HTTP协议中的请求-响应格式
HTTP协议采用了客户-服务器模式,客户端向服务端发起http请求,服务器再对请求做出响应,同时返回一个状态码。客户端通过状态码来判断服务器的处理状态。客户端在发起http请求时,须遵循协议中规定的请求格式,服务器在做出响应时也必须遵循协议中规定的响应格式。
http请求格式
请求格式主要分为:请求行,请求头,请求体。
(1) 请求行
请求行的格式:
METHOD URL HTTP/VERSION CRLF
METHOD表示http请求的方法, URL表示资源在服务器上的地址,GET方法的请求参数也包含在URL里面。 HTTP/VERSION表示http的版本信息,例如HTTP/1.1, HTTP/2.0。1.1与2.0是HTTP协议的常用版本号。CRLF表示回车换行符。
请求行格式举例:
GET /index.html?language=python HTTP/1.1\r\n
(2) 请求头
请求头里面包含的是字段名/字段值对,格式为字段名:字段值。字段名/字段值对以回车换行符进行分隔。http协议预定义了一系列标准请求字段,以下为常用的http请求字段:
http请求头常用字段
| 描述 |
Host | 表示http服务器的地址和端口,地址与端口之间以:进行分隔。 例如Host:www.giantsnow.com:8090,不填端口时表示默认的80端口 |
User-Agent | 用户代理,简称UA,浏览器就是一种UA,例如火狐浏览器可能的User-Agent值为:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0 |
Content-Type | 表示内容的媒体类型,也叫作MIME类型。常见的MIME类型: (1) text/html,表示请求html格式的文件 (2) text/plain, 表示纯文本格式的文件 (3) image/[gif,jpeg, png],[]表示任选其一,例如image/gif, 分别表示gif格式,jpeg格式,png格式的图片文件 (4) application/json 表示json格式的文件 |
Accept | 表示客户端可接受的MIME类型 |
Cookie | Cookie值是服务器返回给客户端的,客户端每次请求时携带一个cookie值,服务器通过该cookie值来对用户进行识别。 |
请求头格式举例,在最后一个属性值对以后须接两个回车换行,表示接下来的是请求体:
Host:www.chipscoco.com\r\n
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0\r\n
Content-Type:text/html\r\n\r\n
以上请求字段中,需重点掌握的是User-Agent以及Cookie。User-Agent用来在爬虫程序中伪造浏览器标识,而Cookie用来维持爬虫的登录状态。
(3) 请求体
请求体中通常包含的是请求的参数信息,请求体中的内容由应用程序负责解析。
由于GET请求的参数被包含在URL中,请求体一般为空。
以POST登录请求为例,在POST请求中包含登录所需的账号和密码:
name=Lina&password=qwert
http响应格式
响应格式主要分为:状态行,响应头,响应体。
(1) 状态行
状态行的格式为:
HTTP/VERSION STATUS REASON CRLF
HTTP/VERSION表示http的版本信息,STATUS表示服务端响应的状态码,REASON是对状态码的描述信息,CRLF表示回车换行。状态码总体来说分为五个类别,同一类别下的状态码表示相同类型的状态信息:
http状态码分类
| 描述 |
1xx | 临时性的响应,并要求客户端继续执行操作 |
2xx | 客户端的请求已被服务端成功处理 |
3xx | 重定向代码,指示客户端发起一个重定向请求 |
4xx | 客户端请求非法,如资源不存在,或无权限访问 |
5xx | 服务器在处理过程中发生错误 |
表格中的1xx,表示以1开头的数字编号,2xx表示以2开头的数字编号,以此类推。我们只需记忆并理解以下常用的状态码:
http常用状态码
| 状态码对应的REASON | 描述 |
200 | OK | 请求已成功,出现此状态码表示正常状态 |
301 | Moved Permanently | 永久重定向,资源被永久转移到其它url,新url值在响应体中的Location中指定 |
302 | Move Temporarily | 旧地址的资源还在,只是临时性的重定向 |
304 | Not Modified | 资源未被修改,客户端询问资源是否被修改时,服务端根据资源情况来选择是否响应该状态码 |
404 | Not Found | 资源不存在,客户端请求的资源不存在时,胡武器会返回该状态码 |
500 | Internal Server Error | 服务器出现了内部错误,无法完成对该请求的处理 |
状态行格式举例:
(1) HTTP/1.1 200 OK\r\n
(2) HTTP/1.1 404 Not Found\r\n
(2) 响应头
响应头里面包含的是一系列字段名-字段值对,格式为字段名:字段值。字段名-字段值对以回车换行符进行分隔。http协议中预定义了一系列标准的响应字段,以下为常用的http响应字段:
http响应头常用字段
| 描述 |
Server | 表示服务器的名称,例如:Server:nginx/1.6.3 |
Set-Cookie | 表示返回一个cookie值给客户端 |
Content-Type | 表示响应内容的MIME类型 |
Content-Length | 表示响应内容的长度 |
Content-Language | 表示响应的内容所使用的语言,比如Content-Language:zh-cn,表示使用的为中文 |
Date | 表示服务器响应时的日期时间 |
Location | 用于资源重定向时,返回资源的新的url |
Allow | 表示服务器允许的http方法 |
响应头格式举例,在最后一个属性值对以后须接两个回车换行,表示接下来的是响应体:
Server:nginx/1.6.3\r\n
Date:Mon, 07 Oct 2019 10:51:06 GMT\r\n
Content-Type:text/html\r\n
Content-Length:20\r\n\r\n
(3) 响应体
表示响应的具体内容,现在结合状态行,响应头,以及响应的html格式的文件来举例:
HTTP/1.1 200 OK\r\n
Server:nginx/1.6.3\r\n
Date:Mon, 07 Oct 2019 10:51:06 GMT\r\n
Content-Type:text/html\r\n
Content-Length:20\r\n\r\n
<h1>Hello World</h1>
在上文http服务器的响应中,状态行为:
HTTP/1.1 200 OK\r\n
响应头为:
Server:nginx/1.6.3\r\n
Date:Mon, 07 Oct 2019 10:51:06 GMT\r\n
Content-Type:text/html\r\n
Content-Length:20\r\n
\r\n
响应体为:
<h1>Hello World</h1>
2.2.5知识要点
(1) HTTP协议是一种请求-响应式协议,客户端发起一个http请求,服务端再对请求作出响应
(2) URL是统一资源定位符,HTTP协议使用URL来进行资源的定位
(3) HTTP协议常用的请求方法:GET,POST,PUT,DELETE
(4) HTTP协议的请求格式主要分为:请求行,请求头,请求体
(5) HTTP协议的响应格式主要分为:状态行,响应头,响应体
2.2.6 最具实力的小班培训
薯条老师在广州有开设线下培训班,小班授课模式,一班最多6个人。也可一对一授课,全程帮助你学好计算机,实现高薪就业。不在广州的同学可提供住宿,也可以报名线上小班,用腾讯会议上直播课。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python中高级爬虫逆向工程师就业班,月薪15K-25K,包拿Offer
(3) Python数据分析+商业分析+数据科学就业班,企业级项目实战,月薪10K-20K
(4) Python量化交易就业班,A股+期货+数字货币量化,月薪10K-40K
(5) Python机器学习+深度学习算法工程师,月薪20-50K
跟薯条老师学习的学生有拿到花生日记,林氏家居,南方电网,京东, 阿里等公司的offer, 学生的最低薪资有6K,最高薪资有18K, 平均就业薪资有11000。
扫码咨询薯条老师: