以前说使用User-Agent来伪装自己不是爬虫,但是这并不能规避服务器禁止访问的问题,但因为程序的运行速度是非常快的,如果我们利用一个爬虫程序在网站爬取数据,一个固定IP会非常频繁去访问服务器,一般来说,正常人是达不到这种手速的,除非你是……,因为手动操作不可能在几ms内,进行如此频繁的访问。所以一些网站一般都会设置一个IP访问频率的阈值,如果一个IP访问频率超过这个阈值,说明这个不是人在访问,而是一个爬虫程序,这个时候你的IP就会被禁止访问服务器。
关于这个问题一般有两种解决方案:
问题分析:由于短时间内使用同一IP地址过高评率访问服务器导致的IP被封禁问题。解决办法:睡眠程序—-使用多个IP地址
一、睡眠程序
一个很简单的解决办法就是设置延时,但是这样会造成我们获取数据花费大量时间,这样不能很好的满足我们的要求。
二、使用ip代理加速器软件
使用多个IP地址,就能很好的解决问题,不仅不会被封禁,而且访问速度也没有太大牺牲。
之前我们使用urlopen()的时候都没怎么详细的了解这个函数,它其实是一个默认的Opener,今天可以说下它的实现。
在urlopen()的实现中有明确的三步实现:
创建handler()
调用build_opener()以handler为参数创建得到opener
使用opener.open()发送请求
我们使用代理的步骤也跟上述基本一致,看下实现:
可以看到IP地址已经伪装完成,需要说明的是,一般来说公司有自己的代理库,这种公开的也只是测试用一哈,如果用自己的代理库也只是简答调整一下就好了。