您的位置:新闻资讯 >文章内容
爬虫遭到封IP该怎么解决
来源:本站 作者:admin 时间:2019-05-13 17:24:16

起因


爬虫工作者应该了解,抓取网站频率过高,或者是数据抓取多了以后,如果爬虫爬取运行的速度过快,那么就很可能触发网站的防爬机制,绝大多数会使用封锁IP这招来对付爬虫。

 

大众的解决方案2个


第一个放慢同一个IP的爬行速度

第二个使用代理IP进行访问

 

使用第一种解决方案那就意味着要牺牲时间和速度,来换取想要的数据,但是,时间是宝贵的,价格是昂贵的,事情也多。谁有那么多时间等着它爬呀,数据量那么大,最理想的状态不是使用最短的时间获取最多的数据吗。所以还是推荐第二个方案。那么代理IP怎么找呢?

 

寻找代理

 

咱们说不懂的就上网查的么,每一款搜索引擎起码前几页都是代理IP商家的网站,可谓是眼花缭乱,有一些会提供一些列表页面,上面会有一些免费的代理IP,但是数据毕竟有限,有个方法你可以把几家免费代理的IP都归拢起来,聚少成多么起码够你使用一阵子了

 

测试代理


通过聚少成多,咱们说你可以用一阵子免费的代理IP了,但是这些IP有多少可以用的你知道?找个方法测试一下不就好了。挂上这些代理IP,访问一个稳定的网站,看看是不是能正常的进行访问,如果正常可以访问那就是ok的,如果进不去,那就说明这个代理IP是不可以用的。

 

举个例子来说,你要访问精灵代理,挂上代理,

 

最快速的,用curl命令就可以测试某个代理是否可用:


# 使用代理 221.225.154.173 访问 精灵代理

curl -x "221.225.154.173" "www.jinglingdaili.com/


当然,这种方式就是为了方便演示,实际上最好的检测方式就是使用多线程的方式,使用代理IP去访问某个网站,然后输出可以使用的代理IP,这样做可以苏旭的找出可以使用的代理。

 

使用代理

我们通过以上的方式,找出可以使用的代理,使用方法就是把筛选出来的可以使用的代理输入到某一个文件当中去,每一行就是一个代理

你便可以这样使用:

读取代理文件

随机选择代理IP,发起HTTP请求

这样,如有有几百个代理IP,基本山可以保持一段时间抓取某些网站的数据了,最起码的可以抓个几万条吧。

但是你说你想用着几百个可以使用的代理IP不停的抓取某个网站获取数据,或者说你想利用这些个代理IP想抓取个几百万个数据信息这点你就不要想了,可实现性基本上不会超过1%

 

持续不断供应代理

以上所说的方法是一次性抓取几个代理网站,然后通过程序进行测试看每隔代理是不是可以使用的,得到可以使用的代理IP的列表。但是这仅仅是一次性的,而且代理的数量也不是很多,持续性的数据抓取根本就供应不上,那么你要想持续不断的获取可以使用的代理IP应该怎么办呢?

 

找到更多的代理网站(数据基础)

定时的监控这些代理网站,获取代理,拿到代理后,程序自动检测,输出可以使用的代理,程序加载到文件或者是数据库,随机获取代理IP发情期http请求,按照以上的方法,可以写出一个自从采集代理的程序,然后爬虫端就可以定时的去文件或者数据库中获取,然后进行使用。但是这样会有一个问题,就是代理IP的运行速度如何。

 

在检测代理IP的时候,我们随时要做的便是要记录代理IP访问的响应时间,相应时间从短到长,加权重值,响应时间端的代理IP使用的机率便也会高很多,限制在某段时间之内的最带使用次数,前面几点只是基础,这3点可以进一步优化你的代理程序,输出有优先级的代理列表,爬虫端根据权重和最大使用次数使用代理。这样做的好处:可以保证使用到高质量代理IP,同时防止某一代理频繁使用防止被封。

 

服务化

以上经过一系列的晚上和优化,已经搭建好了一个可以使用的代理IP的服务,只不过是给予文件系统或是数据库的,爬虫如果想要使用这些代理,只能是读取文件或者读取数据库才可以,然后根据某种规则选择代理使用,这样做会比较繁琐。那么有么有比较简单的方法,那么我们就需要把代理IP做的比较服务化。

 

有个大名鼎鼎的服务器软件squid,利用它的cache_peer邻居代理机制,就可以帮这个事情做的很完美。

 

把代理列表的代理,按照squid的cache_peer机制按照一定格式,写在配置文件中即可。

 

squid是个代理服务器软件,一般情况下是这样使用的,假如爬虫在机器A,squid安装在机器B,需要爬取的网站服务器是机器C,代理IP是机器D/E/F…

 

不使用代理:爬虫机器A请求 —> 网站机器C

使用代理:爬虫机器A —> 代理IP机器D/E/F/... —> 网站机器C

使用squid:爬虫机器A —> squid(机器B,cache_peer机制管理调度代理D/E/F) —> 网站机器C

这样做的好处就是:爬虫端不用考虑如何加载和选择可用代理,给出一个代理列表给squid,按照配置文件的规则,它就可以帮你管理和调度选择代理。最重要的是,爬虫端使用代理只需访问squid的服务端口就可以了!

 

进一步整合

现在服务化也搭建完成了,唯一差得一步就是整合:

 

定时监控代理源网站(30分/1小时都可),解析出所有代理IP,入数据库

从数据库中取出所有代理,访问某个固定的网站,找出访问成功的代理,更新数据库可用标记和响应时间

从数据库中加载所有可用代理,通过某种算法,根据响应时间计算使用权重和最大使用次数

按照squid的cache_peer格式,写入配置文件

重新加载squid配置文件,刷新squid下的代理列表

爬虫指定squid的服务IP和端口,进行纯粹的爬取操作

一个完整的代理服务通过这样的方法就可以搭建完成,定时输出高质量代理。爬虫端不用关心代理的采集和测试,只管使用squid的统一服务入口爬取数据即可。


相关文章内容简介
在线客服
大客户VIP渠道
点击这里给我发消息
讨论QQ群
HTTP代理IP爬虫
客服电话
13318873961