Python爬虫学习一------HTTP的基本原理
Posted qianzhaorong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫学习一------HTTP的基本原理相关的知识,希望对你有一定的参考价值。
昨天刚买的崔大大的《Python3网络爬虫开发实战》,今天就到了,开心的读完了爬虫基础这一章,现记录下自己的浅薄理解,如有见解不到位之处,望指出。
1.HTTP的基本原理
①我们经常会在浏览器输入www.baidu.com这一网址,这一网址到底是什么呢?其实这就是URL,即(Universal Resource Locator)统一资源定位符。URL明确了百度返回给我们的页面所在的位置。其实URL是另一种叫做URI的子集,URI(Universal Resource Identifier)翻译为统一资源标志符,它指明了有这样一个资源。
②什么是超文本?我们知道HTTP的名称为超文本传输协议,到底什么是超文本呢?其实超文本简单来说就是网页的源代码HTML,用一系列标签构成的文本。
③HTTP协议和HTTPS,借用崔大书上对于HTTP协议的理解,HTTP协议是用于从网络上传输超文本数据到本地浏览器的协议,它能够保证高效而准确的传送超文本文档。
而HTTPS英文全称为Hyper Text Transfer over Secure Socket Layer,也就是在应用层和传输层中间加了一层安全套接字层(SSL),该安全套接字层为数据的安全传输提供了保障。SSL层通过非对称加密算法先协商出秘钥,在通过对称加密算法对传输的数据使用秘钥加解密,以此来形成数据的加密,具体的加密可以参考这篇文章:https://blog.csdn.net/zhangmiaoping23/article/details/50378855
④HTTP的请求过程,当我们在浏览器上输入一个www.baidu.com,回车之后我们便会在浏览器中看到页面,这其中具体发生了什么过程呢?
1)浏览器向该域名所在DNS服务器发送一个请求,DNS服务器返回给浏览器www.baidu.com所在的服务器的ip地址。
2)浏览器向www.baidu.com所在服务器的ip地址进行tcp的三次握手。
3)成功建立连接之后,发送HTTP请求报文。
4)百度所在服务器接受到请求之后会返回给用户相应的响应。
5)浏览器接受到响应之后会对响应进行处理个解析,将其显示出来,同时如果没有数据需要传送并且使用的是短连接的话,则进行4次挥手过程断开连接。
⑤HTTP的请求报包含四部分的内容,请求的方式(GET/POST),请求的路径,请求头部信息以及请求体。
1)请求的方式:
GET和POST请求的区别:GET请求时请求的参数会包含在URL中一起传送给后端,参数可以在URL中看见,而POST请求会将信息放在请求体中发送给后端,POST请求的最大好处是请求的内容是不可见的,试想一下,如果在登录的时候使用GET请求,那么密码将毫无保留的显示在浏览器的URL中。
其它常见的请求方式:HEAD请求:类似于GET请求,只返回响应的头部信息。
DELETE请求:请求服务器删除指定的页面。
CONNECT请求(好像没见过,haha):以服务器做为跳板,让服务器代替客户端访问其它页面。
2)请求头部信息:请求的头部包含很多重要的字段,我们在使用爬虫的使用需要根据具体的网页来构造请求头。
ACCEPT:用于指定客户端可以接受哪些类型的信息。
HOST:用于指定请求的主机IP和端口号。
COOKIE(提醒自己很重要):网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能就是维持会话,我们经常在访问一个很久没有访问过的网站时会提示Cookie已失效,需要重新登录,其实这就是Cookie在捣鬼,Cookie在爬取那些需要登录才能获取数据的网站时显得格外重要。
User-Agent(also important):我们可能在刚开始写爬虫时没有任何请求头部信息,这时候服务器收到请求检查请求头部信息中的User-Agent可能会想,这个小伙子一看就是个新手,连UA都不构造就给我发请求,当我真的是傻子嘛!直接给你来一个拒绝服务。所以说,以防万一,还是构造一下User-Agent吧。
Content-Type:通常也叫互联网媒体类型(MIME),用来表示客户端请求的具体类型信息,比如,请求的是html,就需要Content-Type设置为text/html,请求的是json数据,则把Content-Type改成application/json。注意在登录的时候需要设置Content-Type为application/x-www-form-urlencoded,才会以表单的形式提交。
3)请求体:一般请求体在使用POST方式时会将数据放在请求体中,而GET请求里请求体为空。
⑥响应
1)常见的响应状态码:
200:请求成功
301:请求的网页已经永久移动到新的位置
302:请求的网页暂时跳转到其他页面
403:Forbidden,服务器拒绝此请求
404:Not Found,服务器找不到请求的网页
405:Bad Method,服务器禁止这种请求方式
500:服务器内部错误
2)响应头部信息,这里只列了几个常见的。
Content-Type:指定返回的数据类型是什么。
Set-Cookie:设置Cookie,告诉浏览器需要将此内容放在Cookie中,下次请求给带上。
Content-Encoding:指定响应内容的编码。
3)响应体:通常是服务器返回给我们的数据,如网页的源代码,json数据等等,如果想要知道到底是什么,可以通过F12调出开发者工具并使用Network工具来查看。
这一篇HTTP基本原理就写到这里吧,下一篇网页基础和爬虫基本原理。先不说了,我要学习。
以上是关于Python爬虫学习一------HTTP的基本原理的主要内容,如果未能解决你的问题,请参考以下文章