手頭一個小活兒是爬競品網站數據。使用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元。這么昂貴的資源,公司項目停滯后就一直閑置着沒有利用,真是浪費老板的錢呀~~