1.爬虫基础

2019-06-13 09:04:44来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

最近读到崔庆才大神的Python3网络爬虫开发实战,本文基本上是书中的内容,有小的改动,仅供参考,如有侵权请联系删除。

爬虫基础

1.HTTP基本原理

1.URI和URL

URL的全称是Uniform Resource Locator,即统一资源定位符,又叫做网页地址,是互联网上标准的资源的地址。

URL的组成结构:协议,服务器名称,路径,文件名

 

URI的全称是Uniform Resource Identifier,即统一资源标志符,Web上可用的每种资源,比如HTML文档,图像,视频,音频等,有URL进行定位。

 

eg:https://github.com/favicon.ico是Github网站图标的链接,他是一个URL,他也是一个URI,就是说有这样一个图标资源,我们可以用URL/URI来唯一指定他的访问方式,即我们可以通过这个链接来访问这个资源,这就是URL/URI。

URL是URI的子集,每一个URL都是URI,但不是每个URI都是URL。那么,什么样的URI不是URL呢?URI还有一个子类是URN,他的全称是Universal Resource Name,即统一资源名称,URN只命名资源而不定位资源,比如:urn:isbn:123456,指定一本书的ISBN,可以唯一表示这本书,但是并未有定位这个书,我们不知道去哪里找到这本书,这就是URN。

URN,URL,URI的关系如下所示

 

在现在的互联网中,URN用的非常少,而且几乎所有的URI都是URL,所以一般网页链接我们皆可以称为URL,也可以称为URI,习惯上称为URL。

2.超文本

超文本,hypertext,就是页面可以包含图片,链接甚至音乐,程序等非文本元素。HTML是超文本标记语言,我们可以用HTML来写超文本文档,我们在浏览器中看到的网页就是超文本解析而成的,网页的源代码为HTML代码。

我们在一个网页右击检查或者F12,可以看到前端的开发工具,然后再Elements中可以看到网页的源代码,这些都是超文本。

3.HTTP和HTTPS

淘宝网的首页https://www.taobao.com/,URL的开头为https,这是访问资源需要遵循的协议,有时我们还能看到ftp,sftp,smb开头的URL,他们都是协议类型。在以后的爬虫中,我们爬取的页面通常是http或https协议的,所以我们来了解一下这两个协议的含义。

HTTP的全称是HyperText Transfer Protocol,即超文本传输协议,HTTP协议是用于网络传输超文本数据到本地服务器的传送协议,它能保证高效而且准确的传送超文本文档。

HTTPS的全称是HyperText Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,通俗的说就是HTTP的安全版,在HTTP下加入SSL层,简称为HTTPS

HTTPS的安全基础是SSL,它传输的内容都是经过SSL加密的,HTTPS的主要作用分为两种:

1.建立一个信息安全通道,保证数据传输的安全

2.确认网站的真实性,凡是使用了 https 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认 证之后的真实信息,也可以通过 CA 机构颁发的安全签章来查询。

现在大部分的网站都是用HTTPS协议

4.HTTP请求过程

我们在浏览器中输入一个URL,回车之后便会在浏览器中观察到网页内容。实际上这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接受到这个请求后进行处理和解析,并返回对应的响应,返回给浏览器。响应中包含了页面的源代码等内容,浏览器对响应进行解析将网页呈现出来,对应的模型如下:

 

 

客户端代表我们的PC或手机端的浏览器,服务器代表要访问的网站的服务器

为了更加直观的说明这个过程,我们用Chrome浏览器中的开发者模式下的工具NetWork监听组件来演示,他可以显示当前请求网页时发生的所有的网络请求和响应。

我们打开Chrome浏览器,右击检查或F12打开开发者工具,然后点击Network然后在顶部的地址栏上输入https://www.baidu.com/ 后回车,我们可以看到Network下方出现了一个个的条目,其中一个条目就代表发送请求和接受响应的过程,如下图所示

 

 

 

我们先来观察第一个网络请求,即www.baidu.com

其中各列的含义如下:

第一列 Name:请求的名称。一般将URL的最后一部分内容当做名称

第二列 Status:响应的状态码。这里显示为200,代表响应是正常的。通过状态码,我们可以判断发送响应后是否 得到了正常的响应

第三列 Type:请求的文件类型。这里是document,代表我们这次请求的是一个HTML文档,内容就是一些HTML 代码

第四列 Initiator:请求源。用来标记请求是由哪个对象或者进程发起的。

第五列 Size:从服务器下载的文件和请求的资源的大小。如果是从缓存中获取的资源,则该列会显示from cache

第六列 Time:发起请求到获取响应的时间。

第七列 Waterfall:网络请求的可视化瀑布流,

点击条目可以看到更加详细的信息,如下图:

 

首先是General部分:

Request URL:请求的URL;

Request Method:请求的方法;

Status Code:响应状态码;

Remote Address:远程服务器的地址的端口

Referrer Policy:Referrer判别策略

继续往下看,可以看到有Response Headers和Request Headers,这俩分别代表响应头和请求头。

请求头里带有很多的请求信息,例如浏览器标识,Cookies,Host等信息,这是请求的一部分,服务器会根据请求头内的信息判断请求是否合法,进而做出响应。

响应头中的内容是响应的一部分,其中包含了服务器的类型,文旦类型,日期等信息,浏览器接收到响应后,会解析响应的内容,进而呈现网页的内容。

5.请求

请求,由客户端向服务端发出,可以分为4部分内容:请求方法(Request Method)、请求的网址(Request URL)、

请求头(Request Headers)、请求体(Request Body)

1.请求方法

常见的请求方法有两种:GET和POST

在浏览器的地址栏中直接输入URL并回车,这便发起了一个GET请求,请求的参数会直接包含到URL里。例如,在百 度中搜索Python,这既是一个GET请求,链接为https://www.baidu.com/s?wd=Python ,其中URL中包含了请求 的参数信息,参数wd表示要搜寻的关键字。POST请求大多在表单提交时发起。比如一个登录表单,输入用户名和密 码后,点击登录按钮,这通常会发起一个POST请求,其数据以表单的形式传输,不会体现在URL中。

GET和POST请求方法的区别:

1.GET请求的参数包含在URL中,数据可以再URL中看到,而POST请求的URL不会包含这些数据,数据都是通

过表单形式传输的,会包含在请求体中。

2.GET请求提交的数据最多有1024字节,而POST方式没有限制

一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用GET方式请求的话,密码就会暴露在URL中, 从而造成密码泄露,所以这里最好以POST请求发送。上传文件时,由于文件内容比较大,也会选用POST方式。

我们大部分遇到的请求方式为GET和POST,还有另外的一些请求方法:

 

2.请求网址

即URL,它可以唯一确定我们想请求的资源

3.请求头

请求头,用来说明服务器要使用的附加信息,比较重要的信息有:Cookies、Referer、User-Agent等,下面简要说 说明一下常用的头信息:

Accept:请求报头域,用于指定客户端可接受哪些类型的信息

Accept-Language:指定客户端可接受的语言类型。

Accept-Encoding:指定客户端可接受的内容编码

Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网管的位置。

Cookies:网站为了辨别用户进行会话跟踪而存储在用户本地的数据。他的主要功能是维持当前访问会话。举 个例子:当我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们刷新或者请 求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Cookies里有信息标识了我们所对应的服 务器的会话,每次服务器请求该站点的页面时,都会在请求头上加上Cookies,并将其发送给服务器,服务器通过 Cookies来识别出是我们自己,并查出当前状态是登录状态,所以返回结果就是登录后才能看到的网页内容。

Referer:用来表示这个请求是从那个页面发起的,服务器可以拿到这个信息并做相应的处理,如:来源统计,防盗 链处理

User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本 等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能被识别为爬虫

Content-Type:互联网媒体类型或者MIME类型,在HTTP协议消息头中,用来具体表示请求头中的媒体类型信息。

例如:text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型等等,如下表所示:

https://www.runoob.com/http/http-content-type.html

因此,请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头

4.请求体

请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体为空

eg:登录Github是捕获到的请求和响应:

 

 

登录之前,我们填写了用户名和密码信息,提交时这些内容就会以表单数据的形式提交到服务器,此时需要注意的是Request Headers中指定Content-Type为application/x-www-form-urlencoded。重点来了,只有设置Content-Type 为application/x-www-form-urlencoded,才会以表单数据的形式提交。此外,我们也可以将Content-Type设置为application/json来提交json数据,或者设置为multipart/form-data来上传文件。

下表是Content-Type和POST提交数据方式的关系:

 

 

在爬虫中,如果要构造POST请求,需要使用正确的Content-Type,并了解各种请求库的各个参数设置时使用的是哪种Content-Type,不然可能会导致POST提交后无法正常响应

6.响应

响应,由服务端返回客户端,可以分为三个部分:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)。

1.响应状态码

响应状态码表示服务器的响应状态,如200代表服务器正常响应,404代表页面没找到,500代表服务器内部发生错误。

在爬虫中,我们可以根据状态码来判断服务器的响应状态,如状态码为200,则证明成功返回数据,再进行进一步的处理,否则直接忽略。

下面链接是常见的状态码:

https://www.runoob.com/http/http-status-codes.html

2.响应头

响应头包含了服务器对请求的应答信息,若Content-Type、Sever、Set-Cookie等,下边简要说明一些常用的头信息:

Date:标识响应产生的时间

Last-Modified:指定资源的最后修改时间

Content-Encoding:指定响应内容的最后修改时间

Server:包含服务器的信息,比如名称,版本号等

Content-Type:响应内容的数据类型,eg:text/html代表返回HTML文档,application/x-javascript代表返回 JavaScript文件,image/jpeg代表返回图片等。

Set-Cookie:设置Cookies。响应头中的Set-Cookies告诉浏览器需要将此内容放在Cookies中,下次请求携带 Cookies请求。

Expires:指定响应的过期时间。可以使代理服务器或者浏览器将加载的内容更新到缓存中。如果再次访问,就 可以直接从缓存中加载,降低服务器负载,缩短加载时间。

3.响应体

响应体很重要,响应的正文数据都在响应体中,做爬虫请求网页后要解析的就是响应体中的内容

 

preview和response都是响应体内容,但是二者有区别。一般情况下二者的内容相同,在Preview中控制台会把json数据转化为JavaScript的对象格式,而且response不能显示图片等

Preview是预览面板,用于资源的预览,Response是响应信息面板,包含未进行格式处理的内容

在做爬虫时,我们主要通过响应体得到的网页源代码,JSON数据等,然后从中做相应内容的提取。

本节中,我们了解了HTTP基本原理,大概认识和了解了访问页面时背后的请求和响应过程,本节涉及的知识点需要好好掌握,后边分析网页请求时经常用到。

2.网页基础

网页由html,css,javascript组成,html定义了网页的结构,css更改了网页的样式,javascript封装了网页的动作

https://www.runoob.com/ 上边的教程不错,可以看一下,这里就不详细说了

http://www.w3school.com.cn/tags/html_ref_byfunc.asp HTML参考手册

http://css.doyoe.com/ CSS参考手册

http://www.w3school.com.cn/jsref/index.asp JavaScript参考手册

3.爬虫基本原理

我们可以把互联网比作一张大网,而爬虫就是在这张网上爬行的蜘蛛。把网的每个节点比作一个个网页,爬虫爬到这,就获取了网站的信息。把节点之间的连线比作网页与网页之间的链接关系,爬虫爬到一个节点后还可以通过节点之间的连线爬到下一个节点,即通过一个网页获取后续网页,这样的话整个网的节点都可以被爬虫全部爬行到,网页的数据就可以被抓取下来。

1.爬虫概述

简言之,爬虫就是获取网页并提取和保存信息的自动化程序。

1.获取网页

爬虫首先要做的工作就是获取网页,这里指的是获取网页的源代码。源代码里包含了网页的部分有用信息,所以我们只要把源代码获取下来,就可以从中提取到想要获取的信息了。

手工获取大量的网页源代码不太现实,python为我们提供了许多库来帮助我们实现这个操作,如urllib、requests等。我们可以用这些库来帮助我们实现HTTP请求操作,请求和响应都可以用类库提供的数据结构来表示,得到响应后只需解析数据结构中Body部分即可,即得到网页的源代码,这就是我们用程序来实现获取网页的过程。

2.提取信息

获取到网页的源代码后,接下来就是分析网页的源代码,从中提取到我们想要的数据。

提取网页信息有两种方法:

1.使用正则表达式(万能方法) ? 使用正则表达式比较复杂而且容易出错。

2.借助提取网页信息的库,如Beautiful Soup、pyquery、lxml等 ? 借助这些库,我们可以快速高效的提取网页信息。

提取信息是爬虫中非常重要的部分,它可以是杂乱的数据变的条理清晰,以便我们分析和处理数据。

3.保存数据

提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。保存数据的形式多种多样,既可以保存为TXT文本和JSON文本,也可以保存到数据库,像MySQL和MongoDB等,也可以保存至远程服务器,如借助SFTP进行操作等。

4.自动化程序

首先,提取信息我们当然可以手动完成,但是当量特别大或者想要快速抓取信息的时候,手动就比较尴尬,还得借助程序。手速再快也没程序操作的快对吧。所以爬虫应运而生了,它就是抓取信息的自动化程序,它还可以在抓取过程中进行各种异常处理,错误重试等操作,确保爬取持续高效的进行。

2.能抓取怎样的数据

首先最常见的就是常规网页,它对应HTML代码,最常抓取的就是HTML源代码,另外有些页面返回的是JSON字符串(API接口大多采用这种形式),同样也可抓取。此外,我们还可以看到各种二进制数据,如图片,视频和音频等,利用爬虫我们都可以抓取下来,保存为对应的文件名。还有JavaScript文件,CSS文件及配置文件,浏览器能访问到的我们都可以抓取。

简言之,基于HTTP和HTTPS的URL中的数据都可以抓取。

3.JavaScript渲染页面

有时候我们抓取网页时,得到的源代码实际和浏览器中看到的不一样,这是一个很常见的问题,现在的网页很可能都是由Javascript渲染出来的,原来的HMTL代码就是一个空壳,看下图:

 

我们可以从图中看到,body节点里面只有一个id="container"的div标签,但是下方script标签引入了app.js文件,它便负责整个网站的渲染.在浏览器打开这个页面的时候,首先会加载这个HTML内容,接着浏览器会发现其中引入了一个js文件,然后去请求这个文件,获取到文件后,对文件中代码进行执行,就会改变网页的布局,从而得到整个完整的网页

但是我们在用urllib或requests等库请求文件时,我们得到的只是这个HTML代码,不会继续去加载这个js文件,所以我们也就看不到浏览器的内容了.这也解释了为什么有时我们得到的源代码和浏览器看到的不一样.

问题总有解决方法,对于这种情况,我们可以分析其后台Ajax接口,也可以使用Selenium、Splash这样的库来实现模拟JavaScript的渲染

4.会话和Cookies

我们在浏览网站的过程中,会经常遇到需要登录的情况,有些页面只有登录之后才能访问,而且登录之后可以连续访问很多网站,但是有时候过一段时间就需要重新登录。还有一些网站,我们打开之后自动登录,而且很长时间都不会失效,这是什么情况呢?这里面涉及会话(Session)和Cookies的相关知识,我们来揭开它们的神秘面纱。

1.静态网页和动态网页

 

这有一段代码,这是最基本的HTML代码,我们将其保存为一个.html文件,然后把它放在某台具有固定公网IP的主机上,主机上装上Apache或Nginx等服务器,这样这台主机就可作为服务器了,其他人便可以通过访问服务器来看到这个页面,这样就搭建了一个简单的网站.

这样的网页的内容用HTML写好,文字、图片等内容均通过写好的HTML来指定,这种页面叫做静态页面。它加载速度快,编写简单,但是也存在很大的缺陷,比如可维护性差,不能根据URL的灵活多变来显示内容等。举个很简单的例子,我们给这个URL传递一个name参数,这个网页就显示不出来了。

因此,动态网网页就应运而生了,它可以动态解析URL中参数的变化,关联数据库并动态呈现不同的网页内容,非常灵活多变。我们现在遇到的大多数网站都是动态网站,他们不再是一个简单的HTML,可能由JSP,PHP,Python等语言编写的,功能比静态网页强大和丰富太多了。

此外,动态网站还可以实现用户登录和注册的功能。回到上边提到的问题,很多页面是需要登录后才能查看的。按照一般的逻辑来说,输入正确的用户名和密码后,肯定是拿到了一种类似用凭证的东西,有了它,我们才能保持登录,状态,才能访问登录之后看到的页面。

那么问题又双叒叕来了,这神秘的凭证是什么呢?其实它就是Cookies和会话共同作用的结果,下面我们来一探究竟。

2.无状态HTTP

在了解会话和Cookies之前,我们还需要了解HTTP的一个特点:无状态。

HTTP的无状态是指HTTP协议对事务处理是没有记忆能力的,也就是说服务器不知道客户端是处于什么状态。当我们向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,但这个过程是完全独立的,而服务器不会记录前后状态的变化,也就是说缺少状态记录。这就意味值如果后续需要处理前边的信息,则必须重传一遍,这就导致额外传递了一些前面的重复请求,才能获取后续响应,这种效果显然不是我们想要的。为了保持前后状态,我们肯定不能讲前边的请求全部重传一次,这太浪费资源了,特别对于这种需要用户登录的页面来说,更是棘手。这时两个用于保持HTTP连接状态的技术就出现了,它们分别是Cookies和会话。会话在服务端,也就是网站的服务器,用来保存用户的会话信息;Cookies在客户端,也可以理解为浏览器端,有了Cookies,浏览器在下一次访问网页时自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后再判断用户是否是登录状态,然后返回响应的信息。

我们可以理解为Cookies里面保存了登录的凭证,有了它,只需要在下次请求的时候携带Cookies发送请求,而不用重新输入用户名和密码等信息。

在爬虫中,有时候需要处理登录才能访问的页面,我们一般会直接把登录成功后获取的Cookies放在请求头里面直接请求,而不必重新模拟登录。

下面,我们来详细剖析会话和Cookies。

1.会话

会话,其本来的含义是指有始有终的一系列动作或消息。比如,打电话时,从拿起电话拨号到挂断电话这中间的一系列过程可以称为一个会话。

而在Web中,会话对象用来储存特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在会话对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的Web页时,如果该用户还没有会话,Web服务器会自动创建一个会话对象。当会话过期或被放弃后,服务器将终止该会话。

总结一下,会话就是客户端与服务器之间连续发生的一系列请求和响应的过程,会话对象session就是服务端用来存储会话过程中的信息。

2.Cookies

Cookies指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。

会话维持

那么,我们怎样利用Cookies保持状态呢?当客户端第一次请求服务器时,服务器会返回一个响应头中带有Set-Cookies字段的响应给客户端,用来标记是哪一个用户,客户端浏览器会把Cookies保存起来。当浏览器下一次再次请求此网站时,浏览器会把此Cookies放到请求头一起提交给服务器,Cookies携带了会话的ID信息,服务器检查该Cookies便可找到对应的会话是什么,然后判断会话状态来辨认用户状态。

在成功登陆某个网站时,服务器会告诉客户端设置了哪些Cookies信息,在后续访问页面时客户端会把Cookies发送给服务器,服务器再找到对应的会话进行判断。如果会话中的某些设置登录状态的变量是有效的,那就证明用户处于登录状态,此时就会返回登录之后才能看的页面。

反之,如果Cookie是无效得,或者会话已经过期,我们就不能继续访问页面,此时很可能收到错误的响应或者跳转到登录页面重新登录。

所以,Cookies和会话需要配合,Cookies处于客户端,会话处于服务端,二者共同协作,就实现了登录会话维持。

属性结构

下来我们来看一下Cookies里面有哪些内容。以百度为例,在浏览器开发者工具中的打开Application选项卡,然后在左侧有一个Storage部分,最后一项即为Cookies,将其点开,如下图所示,这些就是Cookies。

 

 

可以看到,这里有很多条目,其中每个条目可以称为Cookie。他有以下几个属性:

Name:该Cookie的名称。一旦创建,该名称便不可更改。

Value:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。

Domain:可以访问该Cookie的域名。例如,如果设置为.baidu.com,则所有以baidu.com结尾的域名都可以访问该Cookie。

Max Age:该Cookie失效的时间,单位为秒,也常和Expires一起使用,通过它可以计算出其有效时间。Max Age如果为正数,则该Cookie在Max Age秒之后失效。如果为负数,则关闭浏览器即失效,浏览器也不会以任何形式保留该Cookie。

Path:该Cookie的使用路径。如果设置为/path/,则只有路径为/path/的页面才可以访问该Cookie。如果设置为/,则本域名下的所有页面都可以访问该Cookie。

Size:该Cookie的大小。

HTTP:Cookie的httponly属性。若此属性为true,则只有在HTTP头中会带有次Cookie信息,而不能通过document.cookie的访问此Cookie。

Secure:该Cookie是否仅被使用安全协议传输。安全协议有HTTPS和SSL等,在网络传输数据之前先将数据加密。默认为false。

会话Cookie和持久Cookie

从表面意思上来看,会话Cookie就是把Cookie放在浏览器的内存里,浏览器在关闭之后该Cookie失效;持久Cookie则会保存到客户端的硬盘中,下次还可以继续使用,用于长久保持登录状态。

其实严格来说,没有会话Cookie和持久Cookie之分,只不过由Cookie的Max Age和Expires字段决定了过期时间。

所以,一些持久化登录的网站其实就是把Cookie的有效时间和会话有效期设置的比较长,下次我们访问页面发送请求时仍然携带Cookies,就可以直接保持登录状态。

3.常见误区

当谈论到会话机制时,常常听到这样一种误解-------"只要把浏览器关闭,会话就消失了"。我们可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对于会话来说也是一样的,除非程序通知服务器删除一个会话,否则服务器会一直保留。比如程序一般都是在我们做注销操作时才去删除会话。

当我们关闭浏览时,浏览器不会通知服务器它将要关闭,所以当关闭浏览器时Cookies消失了,而大部分的会话机制都是用会话Cookie来保存会话ID信息,所以Cookies消失了,会话也就找不到了,这就是我们产生错觉的原因了。

但如果我们将Cookies保存到硬盘上,或者是使用某种手段改写浏览器发出的HTTP请求头,将原来的Cookies发送给服务器,我们就可以找到原来的会话ID,就会维持登录状态了。

而恰恰是由于关闭浏览器不会删除会话信息,这就需要服务器为会话设置一个失效时间,当距客户端上次使用这个会话的时间的时间超过了失效时间,服务器就会认为客户端停止了活动,就会删除会话。

5.代理的基本原理

我们在做爬虫的过程中经常会遇到这样的情况,刚开始爬虫正常运行,正确抓取数据,一切都是那么美好,然而一眨眼的功夫就可能出现错误,比如403 Forbidden,这时候打开网页一看,可能会看到"您的IP访问频率太高"这样的提示。出现这种现象的原因是网站采取了一些反爬虫的措施。比如,服务器会检测某个IP在单位时间内的请求次数,如果超过了某个阈值,就会直接拒绝服务,返回一些错误信息,这种情况称为封IP

既然服务器检测的是某个IP单位时间的请求次数,那么借助某种方法来封装我们的IP,让服务器识别不出来是由我们本机发起的请求,这样不就可以防止封IP了吗?

一种有效的方式就是使用代理,下面我们先了解一下代理的基本原理。

1.基本原理

代理实际上指的就是代理服务器,英文叫做proxy server,他的功能是代理网络用户去取得网络信息。形象的说,它就是网络信息中转站。在我们正常请求一个网站时,是发送请求给Web服务器,Web服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发送请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着又代理服务器将服务器返回的响应返回给本机。这样我们可以正常访问页面,但是Web服务器识别的真是IP就不再是我们本机的IP了,成功实现了IP伪装,这就是代理的基本原理。

2.代理的作用

1.突破自身IP访问限制

2.访问一些单位或团体内部资源

3.提高访问速度

4.隐藏真实IP

3.爬虫代理

对于爬虫来说,由于爬取的速度过快,在爬取过程中可能会遇到同一个IP访问过于频繁问题,此时网站让我们输入验证码登录或直接封锁IP,这样会给爬取带来极大的不便。

使用代理隐藏我们的真实IP,让服务器误以为是代理服务器在请求。我们在爬取的过程中,不断更换代理,就不会被封锁,这样能达到很好的爬取效果。

4.代理分类

代理分类时,可以根据协议区分,也可以根据其匿名程度区分。

1.根据协议区分

FTP代理服务器

HTTP代理服务器

SSL/TLS代理

RTSP代理

Telnet代理

POP3/SMTP代理

SOCKS代理

2.根据匿名程度

高度匿名代理

普通匿名代理

透明代理

间谍代理

5.常见代理设置

使用网上的免费代理:最好使用高匿代理,另外可用的代理不多,需要在使用前筛选一下。

使用付费代理:网上有很多代理商,可以付费使用,质量比免费代理好很多。

ADSL拨号:拨一次号换一次IP,稳定性高。


原文链接:https://www.cnblogs.com/yhrfighting123/p/11014951.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:记录错误

下一篇:接口类的多继承以及抽象类的单继承