Python爬虫教程

第一章: 初学乍练-Python快速入门

第二章: 初窥门径-从全局把握网络爬虫

第三章: 爬虫数据-网页与JSON

第四章: 爬虫核心-HTTP协议

第五章: 手到擒来-数据的抓包

第六章: 利刃出鞘-HTTP请求库

第七章: 尘埃落定-数据的解析

第八章: 逆向初探-JS逆向

第九章: 爬虫进阶-Selenium, 中间人拦截

第十章:斗转星移-常用的反爬策略及应对方法

首页 > Python爬虫教程 > 第二章: 初窥门径-从全局把握网络爬虫 > 2.2节: 轻松入门HTTP协议

2.2节: 轻松入门HTTP协议

薯条老师 2021-02-06 14:06:20 237547 0

编辑 收藏

2.2.1请求-响应式协议

HTTP协议是一种请求-响应式协议,客户端发起一个http请求,服务端再对请求作出响应。浏览器就是一种HTTP客户端,我们之所以能打开浏览器上网,是因为浏览器通过HTTP协议向远程的HTTP服务器请求了网页,音频,视频等数据。

1612595049(1).jpg

学习网络爬虫,需要先掌握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实例:

http://chipscoco.com/index.html?language=en

该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。

扫码咨询薯条老师:

扫码领学习资料.jpg


欢迎 发表评论: