WebMagic使用代理ip爬數據解決HTTP407問題



手頭一個小活兒是爬競品網站數據。使用webmagic來實現。光公司ip不行,被封了就會影響業務正常訪問。剛好公司另一個項目購買了代理IP資源“站大爺”,那個項目夭折了,於是申請借來用用。

調通站大爺提供的獲取代理ip的api接口並沒什么技術難度。可是,在運行爬數據程序時,收到http的407錯誤。經了解,407是授權錯誤,要求代理身份驗證。站大爺技術支持提醒說檢查一下產品配置。發現“一手私密代理”里當前授權模式是“用戶名+密碼”(可以在“終端IP授權”和“用戶名+密碼”兩種授權模式中切換)。然后,再看webmagic的Proxy類,有一個構造器是除了必傳的ip、端口外,還可以傳用戶名和密碼。那就是它了。改正以后,測試ok。


webmagic使用代理IP實現爬蟲的部分代碼:

Request request = new Request("https://www.xxx.com/a/b");
request.setMethod("POST");
try {
    request.addHeader("Proxy-Authorization","Basic "+ Base64.getEncoder().encodeToString("20190430**********:password".getBytes("utf-8")));
    request.addHeader("Authorization","Basic "+ Base64.getEncoder().encodeToString("20190430**********:password".getBytes("utf-8")));
}catch (Exception e){
    log.error("",e);
}
request.setRequestBody(HttpRequestBody.json("{pageIdx:'"+pageIdx+"'}","utf-8"));

HttpClientDownloader httpClientDownloader = new HttpClientDownloader();


//            調用api獲取代理IP列表
List<ZdoIpVO> proxyIPList = spiderConfig.getIps();
if(!CollectionUtils.isEmpty(proxyIPList)) {
    ZdoIpVO zdoIpVO = proxyIPList.get(0);
    httpClientDownloader.setProxyProvider(SimpleProxyProvider.from(
            new Proxy(zdoIpVO.getIp(), zdoIpVO.getPort(),spiderConfig.getZdoId(),spiderConfig.getZdoPassword())
    ));
}

Spider.create(this)
        .addRequest(request)
        .setDownloader(httpClientDownloader)
        //開啟2個線程抓取
        .thread(2)
        //啟動爬蟲
        .run();
}

 

查看站大爺資料,我方所對接的一手私密代理IP有1-4小時存活期,可同時提取1000左右(江浙粵一帶居多),足見這個企業的技術強勢。不過,一分價錢一分貨,購買一年的費用高達18000元。這么昂貴的資源,公司項目停滯后就一直閑置着沒有利用,真是浪費老板的錢呀~~

 

參考:http://ip.zdaye.com/Help/2925.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM