Java 파일을 사용하고 기본 메소드를 실행하십시오. 의존하는 JAR 패키지는 com.alibaba.fastjson (버전 1.2.28) 및 JSOUP (버전 1.10.2)입니다.
POM을 사용하는 경우 다음 두 가지는 다음과 같습니다.
<pectionency> <groupId> com.alibaba </groupid> <artifactid> fastjson </artifactid> <2.28 </version> </fectionency> <pectionency> <groupId> org.jsoup </groupid> <artifactid> jsoup </artifactid> version> 1.10.2 </dependency>
전체 코드는 다음과 같습니다.
package com.tuniu.fc.fcade.ipproxy; import com.alibaba.fastjson.jsonobject; import org.jsoup.jsoup; import org.jsoup.nodes.document; import java.util.arraylist; import java.util.hashmap; import java.util.list; java.util; java.util.regex.matcher; import java.util.regex.pattern;/** * 프록시 IP를 얻으려면 * com.alibaba.fastjson.jsonobject 및 jsoup */public class proxycralwerunusedvpn {integer> localwantednumber = new ThreadLocal <integer> (); ThreadLocal <list <proxyInfo >> localProxyInfos = new ThreadLocal <list <proxyInfo >> (); public static void main (string [] args) {proxycralwerunusedvpn proxycrawler = new proxycralwerunusedvpn; /*** 획득 할 프록시 IP의 수는 Demander에 의해 지정되어야합니다. (너무 많은 경우 반품 속도가 느려집니다) */ proxycrawler.startcrawler (1); } / *** 외부 모듈 호출 입구에 노출 됨* @param WantmentNumber 발신자가 예상하는 프록시 ip의 수* / public string startCrawler (int wantedNumber) {localWantedNumber.Set (WASTHENTNUMBER); Kuaidailicom ( "http://www.xicidaili.com/nn/", 15); Kuaidailicom ( "http://www.xicidaili.com/nt/", 15); Kuaidailicom ( "http://www.xicidaili.com/wt/", 15); Kuaidailicom ( "http://www.kuaidaili.com/free/inha/", 15); Kuaidailicom ( "http://www.kuaidaili.com/free/intr/", 15); Kuaidailicom ( "http://www.kuaidaili.com/free/outtr/", 15); / *** 수 구조 반환 데이터*/ proxyResponse 응답 = new proxyResponse (); 응답 .SetSuccess ( "true"); map <string, object> datainfomap = new Hashmap <String, object> (); datainfomap.put ( "numfound", localProxyInfos.get (). size ()); datainfomap.put ( "pagenum", 1); datainfomap.put ( "proxy", localproxyinfos.get ()); Response.SetData (DataInfomap); String responseString = jsonobject.tojson (응답) .toString (); System.out.println (응답); 반응 반응; } private void kuaidailicom (string baseurl, int totalpage) {String ipreg = "//d {1,3 }//./d {1,3 }//.//d (1,3 }//./d {1,3 }//.//d {1,3} // d {1,6}; 패턴 ipptn = pattern.compile (ipreg); for (int i = 1; i <TotalPage; i ++) {if (getCurrentProxyNumber ()> = localWantEdNumber.get ()) {return; } try {docure doc = jsoup.connect (baseurl + i + "/") .Header ( "accept", "text/html, application/xhtml + xml, application/xml; q = 0.9, image/webp,*/*; q = 0.8") .Header ( "허용-에코딩", "gzip,". " "ZH-CN, ZH; Q = 0.8, en; q = 0.6") .Header ( "캐시 제어", "max-age = 0") .Header ( "user-agent", "mozilla/5.0 (Macintosh; Intel Mac OS x 10_11_4) Applewebkit/537.36 (Gecko와 같은 Khtml, khtml). safari/537.36 ") .Header ("쿠키 ","HM_LVT_7ED65B1C4B810E9FD37959C9BB51B31 = 1462812244; "www.kuaidaili.com") .Header ( "참조", "http://www.kuaidaili.com/free/outha/") .timeout (30 * 1000) .get (); MATCHER M = IPPTN.MATCHER (Doc.Text ()); while (m.find ()) {if (getCurrentProxyNumber ()> = localWantEdNumber.get ()) {break; } string [] strs = m.group (). split ( ""); if (checkProxy (strs [0], integer.parseint (strs [1])) {System.out.println ( "사용 가능한 프록시 IP/T" + strs [0] + "/t" + strs [1]); AddProxy (strs [0], strs [1], "http"); }}} catch (예외 e) {e.printstacktrace (); }}} private static boolean checkProxy (문자열 IP, 정수 포트) {try {//http://1212.ip138.com/ic.asp는 더 빠른 웹 페이지 jsoup.connect로 대체 될 수 있습니다 ( "http://1212.ip138.com/ic.asp"). 진실을 반환하십시오. } catch (예외 e) {return false; }} private int getCurrentProxyNumber () {list <ProxyInfo> proxyInfos = localProxyInfos.get (); if (proxyInfos == null) {proxyInfos = new ArrayList <proxyInfo> (); LocalProxyInfos.set (proxyinfos); 반환 0; } else {return proxyInfos.size (); }} private void addProxy (문자열 ip, 문자열 포트, 문자열 프로토콜) {list <proxyinfo> proxyInfos = localProxyInfos.get (); if (proxyInfos == null) {proxyInfos = new ArrayList <proxyInfo> (); proxyinfos.add (new proxyInfo (IP, 포트, 프로토콜)); } else {proxyInfos.add (new proxyInfo (ip, port, protocol)); }}} class proxyInfo {private String username = ""; 개인 문자열 IP; 개인 문자열 비밀번호 = ""; 개인 문자열 유형; 개인 문자열 포트; 개인 int is_internet = 1; public proxyInfo (문자열 ip, 문자열 포트, 문자열 유형) {this.ip = ip; this.type = 유형; this.port = 포트; } public String getUserName () {return username; } public void setusername (String username) {this.username = username; } public String getIP () {return IP; } public void setip (String IP) {this.ip = ip; } public String getPassword () {return password; } public void setpassword (문자열 비밀번호) {this.password = password; } public String getType () {return 유형; } public void settype (문자열 유형) {this.type = 유형; } public String getPort () {return port; } public void setport (문자열 포트) {this.port = 포트; } public int getis_internet () {return is_internet; } public void setis_internet (int is_internet) {this.is_internet = is_internet; }} 클래스 proxyResponse {개인 문자열 성공; 개인지도 <문자열, 객체> 데이터; 공개 문자열 getSuccess () {반환 성공; } public void setSuccess (문자열 성공) {this.success = success; } public map <string, object> getData () {return data; } public void setData (map <String, Object> Data) {this.data = data; }}Java 프록시 크롤링 프록시 IP의 위의 예는 내가 공유 한 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.