多线程代理IP池

                有的时候需要对某些免费接口进行访问,或者数据爬虫时,为了防止某段时间大规模访问,对方封IP的这种情况。在自己进行访问时最好可以尝试换IP来访问。那么换IP怎么访问,这就牵扯到简单的还是自己动手解决。

简单的情况下,就是自己买免费的IP,去接接口获取。或者手动配置。缺点是,买免费要钱,在不是公司级业务的情况下,花钱有点冤大头。不买自己百度的话,第一是不够灵活,因为代理ip死亡时间很快,第二是极其麻烦,还要自己找,自己放在变量里?

所以,最好的解决方式是,要么出钱买一个接口自动获取,要么自己写一个代理ip池,不断地获取新的ip,并进行活跃度检测,删除死亡的ip达到一个转换的效果。

本文大致讲解一下,多线程代理ip池的思路,有关完整代码在文末提供链接下载。

              首先,一个代理ip池要从时间逻辑上要考虑以下几个东西

              1.从那里获取

              2.怎么获取

              3.提高获取速度

              4.保存在哪里

              5.活跃度怎么保证

              解决一下上述问题,就能编写出来了。

              1.既然是免费代理ip池,那就从网上找到提供免费代理ip的网站,从网站上获取

              2.通过模拟请求,把网站上的代码获取到,通过jsoup解析,获取ip列表

              3.可以多找一些种子页面,也就是多找几个免费提供代理ip的网站,同时用多线程,同时对多个网站,多个page页面进行解析

              4.如果很多人要用,放在数据库,如果自己用,放在redis里最好,如果只是学着玩放在static List 里也行

              5.在启动的时候,开启一个线程对活跃度进行检测,简单的来说,在一定的周期后,此任务启动,会用保存的ip去请求一个网站,如果请求的通,就说明是此Ip可用

               其实讲到这里基本就不用多说了,这个逻辑还是比较简单的,没有牵扯过多复杂的东西。

               还是根据对应逻辑点,放几张对应代码的图片,方便理解下吧。

               1.

               多线程代理IP池_第1张图片

              2.


          多线程代理IP池_第2张图片

3.创造线程池,同时对两个网站,前十页的ip进行解析,下面的cheakActive是对活跃度进行检测的,update刷新掉不活跃的ip

多线程代理IP池_第3张图片

4.选择存储位置,优先选择redis,没有开启redis选择List。抽象父类,下面的redis和list只要继承这个方法实现对应方法,直接掉父类方法就成了

多线程代理IP池_第4张图片

5.请求超时的删除

多线程代理IP池_第5张图片

6.结果:

多线程代理IP池_第6张图片

多线程代理IP池_第7张图片


源码下载地址:java maven的

http://download.csdn.net/download/zxysshgood/10138666

你可能感兴趣的:(java)