• <th id="bb20k"></th>
    1. <th id="bb20k"></th>
      1. <th id="bb20k"></th>
        <progress id="bb20k"></progress>

        您的位置:新聞資訊 >文章內容
        如何構建代理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池的。


        相關文章內容簡介
        國內住宅IP代理使用指南
        解鎖高速不限量IP代理
        精靈代理-專業提供國內動態ip代理 ip加速器 http代理 網絡加速器服務。解鎖高速不限量IP代理在當今互聯網時代,隨著網絡安全和隱私保護意識的提高,許多人都開始關注如何保護自己的在線活動不受跟蹤和監視。IP代理就成為了一種常用的工具,通過隱藏真實IP地址來保護個人隱私和保密性。而高速不限量IP代理更是用戶們追求的目標。高速代理的重要性對于許多用戶來說,網絡速度是使用代理時最關鍵的問題之一。如果代理速度太慢,會導致網頁加載緩慢,甚至無法正常使用某些服務。因此,高速代理變得尤為重要。高速代理可以確保用戶在使用代理時,不會受到速度的限制,能夠正常流暢地訪問各種網站和服務。不限量代理的優勢另外,不限量的代理也是用戶們所追求的。有些代理服務提供商會對用戶的流量進行限制,一旦超出限制就會導致代理服務無法正常使用。而不限量的代理則可以避免這個問題,用戶可以隨意使用代理服務,不用擔心流量限制的問題。如何解鎖高速不限量IP代理要解鎖高速不限量IP代理,首先需要選擇一個可靠的代理服務提供商。在選擇代理服務提供商時,用戶需要注意服務商的信譽度、服務質量和價格等因素...[閱讀全文]
        在線咨詢
        微信公眾號

        微信公眾號

        回到頂部
        国产欧美 一区,国产一本大道香蕉AV,国产亚洲卡通另类图片,国产高清AV在线