您的位置:新闻资讯 >文章内容
如何构建代理IP池?使用Java构建免费代理IP池方法
来源:fengzhizi715 作者:admin 时间:2018-12-12 16:38:27

爬虫需要的IP量比较大,特别是爬去大量的数据,而且有一些网站的反爬虫机制比较严格,或许需要更优质的IP,这时候可以尝试构建代理IP池,那么如何构建代理IP池?

代理IP池的构建并不难,难得是控制IP的质量与数量。通过IP是从免费的网站上获取,这类IP质量低,可用率低;或者通过购买代理IP,质量跟数量都可以控制,缺点就是花钱;又或者通过搭建服务器,IP稳定、质量高,问题是成本过高。

本文的代理IP池是通过爬虫事先从多个免费网站上获取代理IP之后,再做检查判断IP是否可用,可用的话就存放到MongoDB中,最后展示到前端的页面上。

一、获取可用Proxy

获取代理的核心代码是ProxyManager,它采用RxJava2来实现,主要做了以下几件事:

1.创建ParallelFlowable,针对每一个提供免费代理IP的页面并行地抓取。

Flowable.fromIterable(ProxyPool.proxyMap.keySet())                 .parallel()

2.针对每一个页面进行抓取,返回List

map(new Function<String, List>() {                     @Override                    public List apply(String s) throws Exception {                         try {                             return new ProxyPageCallable(s).call();                         } catch (Exception e) {                             e.printStackTrace();                         }                         return null;                     }                 })

3.对每一个页面获取的代理IP列表进行校验,判断是否可用

flatMap(new Function<List, Publisher>() {                     @Override                    public Publisher apply(List proxies) throws Exception {                         if (proxies == null) return null;                         List result = proxies                                .stream()                                 .parallel()                                 .filter(new Predicate() {                             @Override                            public boolean test(Proxy proxy) {                                 HttpHost httpHost = new HttpHost(proxy.getIp(), proxy.getPort(), proxy.getType());                                 return HttpManager.get().checkProxy(httpHost);                             }                         }).collect(Collectors.toList());                         return Flowable.fromIterable(result);                     }                 })

4.依次保存到proxyList

subscribe(new Consumer() {                     @Override                    public void accept(Proxy proxy) throws Exception {                         log.debug("Result Proxy = "+proxy.getType()+"://"+proxy.getIp()+":"+proxy.getPort());                         proxy.setLastSuccessfulTime(new Date().getTime());                         ProxyPool.proxyList.add(proxy);                     }                 });

5.附上完整的流程图

如何构建代理IP池?使用Java构建免费代理IP池方法


二、定时任务

每隔几个小时跑一次定时任务,在抓取完任务之后先删除旧的数据,然后再把新的数据插入到MongoDB中。

三、展示到前端

整个项目使用Spring Boot搭建,运行起来之后本地访问地址。

预览效果如下:

如何构建代理IP池?使用Java构建免费代理IP池方法

在使用前,还可以再做一次检测,只要双击某个代理IP即可。

如何构建代理IP池?使用Java构建免费代理IP池方法

检测某个代理.jpeg

在第二次检测时,对于已经失效的IP会被ProxyPool删除。

如何构建代理IP池?上文介绍了爬去免费IP建IP池,其实在做爬虫时,自己维护一个可用的代理IP池是很有必要的事情,如果是企业或者是想追求更高稳定性的IP池,即使不选用服务器构建,也可以购买代理IP构建IP池的。


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