爬虫基本原理
网络爬虫的本质
爬虫是模仿用户在浏览器或者某个应用上的操作,把操作的过程实现自动化的程序
数据的传输是由客户端和服务器来进行交互的, 他们进行交互的层是传输层,遵守TIP/IP协议
我们在查询一个网址之后发生了四个步骤
-
查找域名对应的IP地址
-
向IP对应对的服务器发送请求
-
服务器相应请求,发回网页内容
-
浏览器解析网页内容
客户机访问服务器的过程叫做请求
服务器返回客户机的过程叫做响应
网络爬虫的本质实际上就是浏览器http请求,浏览器和网络爬虫是两种不同的网络客户端,都以相同的方式来获取网页。
📌而网络爬虫简单来说就是实现浏览器的功能,通过指定url,直接返回给用户所需要的数据,而不是一步步人工去操纵浏览器获取
HTTP协议
网络通信,首先会通过HTTP超文本传输协议进行传播
HTTP协议目的是为了提供一种发布和接受HTML页面的方法,HTTP是基于TCP协议之上的,默认HTTP的端口号为80,HTTPS的端口号为443
一次HTTP操作称为一个事务,其整个工作过程如下:
- 地址解析
如用客户端浏览器请求这个页面:
https://localhost
从中解析协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析结果如下:协议名、http主机名:localhost.com 端口:8080 对象路径:/index.htm
在这一步,需要域名系统DNS解析域名localhost.com得到主机的IP地址
- 封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
- 封装成TCP包,建立TCP连接(三次握手)
在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口
- 客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
- 服务器响应
服务嚣接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
实体信息是服务器向浏览器发送头信息后,他会发送一个空白行来表示头信息的发送到此结束,接着,它就以Content-Type应答头信息所描述的格式发送用户请求的实际数据
- 服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
HTTPS协议
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。其所用的端口号是443。
SSL:安全套接层,是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。
在应用层和传输层之间添加了SSL,保证了数据传输的安全
有两种基本的加解密算法类型:
-
对称加密∶密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES.AES,RC5,3DES等;
对称加密主要问题是共享秘钥,除你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。解决这个问题的方案非对称秘钥。 -
非对称加密:使用两个秘钥:公共秘钥和私有秘钥。私有秘钥由一方密码保存(一般是服务器保存),另一方任何人都可以获得公共秘钥。
这种密钥成对出现〈且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
https的优点:
-
客户端产生的密钥只有客户端和服务器端能得到
-
加密的数据只有客户端和服务器端才能的到明文
-
客户端到服务端的通信是安全的
HTTPS其实是由两部分组成:HTTP+SSL/TLS,也就是在HTTP上加了一层处理加密信息的模块,服务器和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密、验证的,可以看一下下图
- 1.客户端发起HTTPS请求
在浏览器里输入一个https网址,然后连接到server的443端口。
- 2.服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
- 3.传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
- 4.客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
- 5.传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
- 6.服务段解密信息
服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种篁法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
- 7.传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原
- 8.客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。
HTTPS对于的通信时序图: