1.爬虫基础
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是捕获到的请求和响应:
在爬虫中,如果要构造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拨号