1.爬虫基础

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

爬虫基础

1.HTTP基本原理

1.URI和URLcss

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

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

 

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

 

eg:https://github.com/favicon.ico是Github网站图标的连接,他是一个URL,他也是一个URI,就是说有这样一个图标资源,咱们能够用URL/URI来惟一指定他的访问方式,即咱们能够经过这个连接来访问这个资源,这就是URL/URI。python

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

URN,URL,URI的关系以下所示github

 

在如今的互联网中,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下方出现了一个个的条目,其中一个条目就表明发送请求和接受响应的过程,以下图所示

 

 

 

咱们先来观察第一个网络请求,即http://www.javashuo.com/tag/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,稳定性高。

相关文章
相关标签/搜索