Python爬虫入门:HTTP协议和Chrome开发者工具的使用

Posted 编程界的小胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫入门:HTTP协议和Chrome开发者工具的使用相关的知识,希望对你有一定的参考价值。

我们学习知识就像盖房子一样,没有良好的地基,房子经不起风吹雨打。而如果房子的地基搭建的足够牢固,即使台风来了都是高高的耸立在那里。

我们没有上来就讲爬虫怎么用,而是讲了一些基础的内容,这些内容大家都掌握了,后面我们学习实操爬虫就会很顺利,很清晰了。

HTTP协议

提到爬虫我们不得不提起HTTP协议,那什么是HTTP协议呢?

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。

  • 超文本:是指超过文本,不仅限于文本;还包括图片、音频、视频等文件

  • 传输协议:是指使用共用约定的固定格式来传递转换成字符串的超文本内容

  • 默认端口号:80

并且HTTP是一种无状态(stateless) 协议,HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务,提高效率。

有时我们还会使用到https协议,其实他是HTTP + SSL(安全套接字层),即带有安全套接字层的超本文传输协,默认端口号:443

  • SSL对传输的内容(超文本,也就是请求体或响应体)进行加密

请求

HTTP协议中每次请求都会携带下方的内容,比如有请求的方法、请求的路径、协议的版本等我们称作请求行。

还有符合字段名:值的这个方式的,我们称作请求头。

最后一部分是请求体。

大家来看一下,浏览器的开发者工具Network中的请求情况:

我们可以发现浏览器在发出请求的时候也是携带了请求行、请求头等内容。

请求行中最主要的就是url和请求方法method,有哪些请求方法呢?

HTTP协议的方法有:

GET:请求获取Request-URI所标识的资源

POST:在Request-URI所标识的资源后增加新的数据

HEAD:请求获取由Request-URI所标识的资源的响应消息报头

PUT:请求服务器存储或修改一个资源,并用Request-URI作为其标识

DELETE:请求服务器删除Request-URI所标识的资源

TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断*

CONNECT:保留将来使用*

OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求

一般不声明默认使用的是GET请求,另外常用的是POST请求。对于上面写到的其他的请求大多数是API接口程序会涉及到的。所以大家主要记住两个就可以了:GET和POST。

爬虫中特别关注的请求头

无论是浏览器还是爬虫,在发出请求的时候要遵守HTTP协议,遵守HTTP协议就要携带请求头。

浏览器的请求头有哪些呢?同样在Network模式点击一个链接查看:

这么多请求头发出请求的时候都要加吗?不是的,因为每个网站的请求头也是不一样的,也不是统一的。所以爬虫特别关注以下几个请求头字段:

  • Content-Type

  • Host (主机和端口号)

  • Connection (链接类型)

  • Upgrade-Insecure-Requests (升级为HTTPS请求)

  • User-Agent (浏览器名称)

  • Referer (页面跳转处)

  • Cookie (Cookie)

  • Authorization(用于表示HTTP协议中需要认证资源的认证信息,如前边web课程中用于jwt认证)

加粗的请求头为常用请求头,在服务器被用来进行爬虫识别的频率最高,相较于其余的请求头更为重要,但是这里需要注意的是并不意味这其余的不重要,因为有的网站的运维或者开发人员可能剑走偏锋,会使用一些比较不常见的请求头来进行爬虫的甄别

响应

有请求再加上响应才是一个完整的 HTTP 协议过程。那返回的响应内容格式又是什么呢?

所以每一次响应都会包含上图中的内容,状态码、协议版本、响应头、响应实体等。

同样为了我们更加直观的来看响应我们还是通过浏览器的Network来看。可以看到有状态码、远程主机IP、响应头等内容。

还有一个主要内容是没有看到的,那就是响应体,需要点击一下Response,就会发现下面发生了变化,你所看到的就是响应体的内容。

大家也要学会查看状态码,因为并不是所有请求返回的状态码都是200,还有可能是304,500,404等。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 1xx指示信息 - 表示请求已接收,继续处理 2xx成功 - 表示请求已被成功接收、理解、接受 3xx重定向 - 要完成请求必须进行更进一步的操作 4xx客户端错误 - 请求有语法错误或请求无法实现 * 5xx服务器端错误 - 服务器未能实现合法的请求。

常见状态代码:

200: OK - 客户端请求成功*

400: Bad Request - 客户端请求有语法错误,不能被服务器所理解

401: Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用*

403: Forbidden - 服务器收到请求,但是拒绝提供服务

404: Not Found - 请求资源不存在,eg:输入了错误的URL*

500: Internal Server Error - 服务器发生不可预期的错误 *

503: Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

所以浏览器在发出请求的时候,运行过程是:

HTTP请求的过程:

1、我们无论访问任何网站都是在浏览器的地址栏上输入域名的,比如:http://www.baidu.com. 因为域名好记啊!我们从来不会记得百度的IP地址。但是识别的过程有DNS域名解析服务器完成了,它能够根据你输入的域名找到匹配的IP地址,然后将IP地址告诉你。

2、浏览器在拿到域名对应的ip后,开始发起请求,并获取响应。

3、在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应。

4、浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应。

5、从获取第一个响应并在浏览器中展示,直到最终获取全部响应,——这个过程叫做浏览器的渲染。

那讲了这么多,到底HTTP跟我们即将要讲的爬虫有什么关系呢?请看下图:

这个是爬虫的步骤,而HTTP协议则是这个步骤中的一部分而且是最重要的一部分,即发送请求获取响应的那部分。

【说的明白些,就是【请求和响应】这段其实就是浏览器要干的活,我们通过写程序假装是浏览器在访问。】

!!!上图红色框起来的那部分就是假装浏览器在做事情~

 

以上是关于Python爬虫入门:HTTP协议和Chrome开发者工具的使用的主要内容,如果未能解决你的问题,请参考以下文章

http协议和chrome浏览器

http协议和Chrome抓包工具

Django之web应用http协议和django简介

HTTP协议和html常用标签介绍

HTTP协议和几种常见的状态码

HTTP协议和网络抓包资料整理