첫 번째 단계는 Linkqueue 및 필터를 구현하고 URL을 저장하는 것입니다.
java.util.arraylist 가져 오기; java.util.collections import; java.util.hashset 가져 오기; Java.util.list 가져 오기; java.util.set import; 공개 클래스 linkqueue {// 액세스 URL 컬렉션 개인 정적 세트 <string> visitedUrl = collections.synchronizedset (new Hashset <string> ()); // 인계되지 않은 URL 개인 정적 목록 <string> unvisitedUrl = collections.synchronizedList (new ArrayList <string> ()); // 방문되지 않은 URL은 대기열에서 벗어났습니다. 공개 정적 문자열 UnvisitedUrlDequeue () {if (UnvisitedUrl.size ()> 0) {String url = UnvisitedUrl.remove (0); visitedUrl.add (url); 반환 URL; } return null; } // 새 URL이 추가 된 시점을 확인하고 공개 정적 void addUnvisitedUrl (String URL) {if (url! = null &&! url.trim ( ""&&! visitedUrl.contains (url) &&! unvisitedUrl.contains (url)) unvisitedUrl (url); } // 방문하지 않은 URL 큐가 빈 공개 정적 부울 UnvisitedUrlSempty () {return unvisitedUrl.isempty (); }}두 번째 단계는 각 URL과 필터 아래에 링크를 수집하여 새 링크를 생성하는 것입니다.
java.util.hashset 가져 오기; java.util.set import; import org.htmlparser.node; import org.htmlparser.nodefilter; import org.htmlparser.parser; import org.htmlparser.filters.nodeclassfilter; import org.htmlparser.filters.orfilter; import org.htmlparser.tags.linktag; import org.htmlparser.util.nodelist; import org.htmlparser.util.parserexception; / ** * 규칙을 준수 할 수있는 URL을 가져 오기 위해 HTTP의 URL 필터 * @Author Administrator */ public class parserhttpurl {// 웹 사이트에서 링크 가져 오기, 필터는 링크를 필터링하는 데 사용됩니다 <string> ExtracLinks (string url, linkfilter) {set <string> intress = new Hashset <string> (); try {parser parser = new Parser (URL); // 프레임 태그 NodeFilter FrameFilter = New NodeFilter () {public boolean accept (Node Node) {if (node.getText (). startStwith ( "frame src =")) {return true; } else {return false; }}}}; // 필터링 <a> 태그를 설정하려면 orfilter 및 <frame> 태그 orfilter linkfilter = new Orfilter (new nodeclassfilter (linktag.class), framefilter); // 필터링 된 모든 태그를 가져옵니다. NODELIST LIST = PARSER.EXTARTOLLNODEDESTHATMATCH (LinkFilter); for (int i = 0; i <list.size (); i ++) {node tag = list.elementat (i); if (linktag의 태그 인스턴스) // <a> tag {linktag link = (linktag) tag; String linkurl = link.getLink (); // url if (filter.accept (linkurl)) links.add (linkurl); } else // <frame> tag {// <frame src = "test.html"/> strame = tag.getText (); int start = frame.indexof ( "src ="); frame = frame.substring (시작); int end = frame.indexof ( ""); if (end == -1) end = frame.indexof ( ">"); 문자열 frameurl = frame.substring (5, end -1); if (filter.accept (frameurl)) links.add (frameurl); }} catch (parserexception e) {e.printstacktrace (); } 리턴 링크; }}3 단계 : 이미지 다운로드 기능을 구현하십시오
import java.io.file; import java.io.fileoutputStream; import java.io.inputstream; import java.net.url; import java.net.urlConnection; java.util.arraylist 가져 오기; Java.util.list 가져 오기; import java.util.regex.matcher; java.util.regex.pattern import; / *** * Java 크롤링 네트워크 사진 * * @Author SwingLife * */ public class downloadPic {// 개인 정적 최종 문자열 ecoding = "UTF-8"; // IMG 태그를 받는다 일반 개인 정적 최종 문자열 imgurl_reg = "<img.*src = (.*?) [^>]*?>"; // 일반 개인 정적 최종 문자열을 가져옵니다 Imgsrc_reg = "http :/"? (.*?) (/"|> | // s+)"; public static void downloadPic (문자열 URL) {// html 텍스트 내용을 가져옵니다. html = null; try {html = downloadpic.gethtml (url); } catch (예외 e) {e.printstacktrace (); } if (ull! = html &&! "". // 이미지를 가져옵니다 SRC 주소 목록 <String> imgsrc = downloadPic.getImagesrc (imgurl); // 이미지 다운로드 downloadloadpic.download (imgsrc); }} / *** * html 컨텐츠 가져 오기 * * @param url * @return * @throws Exception * / private static string gethtml (String URL)은 예외 {url uri = new url (url); urlConnection Connection = uri.openConnection (); inputStream in = connection.getInputStream (); 바이트 [] buf = 새로운 바이트 [1024]; int 길이 = 0; StringBuffer sb = new StringBuffer (); while (길 } in.close (); 반환 sb.toString (); } / *** * imageUrl 주소 가져 오기 * * @param html * @return * / private static list <string> getImageUrl (String html) {matcher matcher = pattern.compile (imgurl_reg) .matcher (html); List <string> listimgurl = new ArrayList <string> (); while (matcher.find ()) {listimgurl.add (matcher.group ()); } return listimgurl; } / *** * imagesrc 주소 가져 오기 * * @param listimageurl * @return * / private static list <string> getImagesrc (list <string> listImageUrl) {list <string> listimgsrc = new arraylist <string> (); for (문자열 이미지 : listImageUrl) {matcher matcher = pattern.compile (imgsrc_reg) .matcher (image); while (matcher.find ()) {listimgsrc.add (matcher.group (). substring (0, matcher.group (). longth () -1)); }} return listimgsrc; }/**** 이미지 다운로드** @param listimgsrc*/private static void download (list <string> listimgsrc) {for (string url : listimgsrc) {try {string {string imagename = url.substring (url.lastindexof ( "/") + 1, url.length ()); URL URI = New URL (URL); inputStream in = uri.openstream (); fileoutputStream fo = 새 FileOutputStream (새 파일 (imageName)); 바이트 [] buf = 새로운 바이트 [1024]; int 길이 = 0; while (길 } in.close (); fo.close (); } catch (예외 e) {e.printstacktrace (); }}}}실제 필터 인터페이스, 필터 인터페이스 정의 :
공개 인터페이스 필터 {public boolean acccep (문자열 URL); }4 단계 : 필터링 규칙 구현 :
공개 클래스 크롤러 { /** * 크롤링 프로세스 * * @return * @param seeds * /public void crawling (문자열 URL) {// 필터 필터 필터 정의 = new Filter () {public boolean accept (문자열 URL) {// 여기 필터링 규칙은 크롤링 해야하는 웹 사이트의 규칙에 따라 변경됩니다. 정기적 인 구현을 사용하는 것이 좋습니다. 나는 (url.indexof ( "d 그렇지 않으면 거짓을 반환합니다. }}; // URL 큐 초기화 linkqueue.addunvisitedUrl (url); // 루프 조건, 크롤링 할 링크는 비어 있지 않습니다. if (visiturl == null) 계속; DownloadLoadPic.DownloadPic (visiturl); // 다운로드 된 웹 페이지에서 URL을 추출 세트 <string> links = parserhttpurl.extraclinks (visiturl, 필터); // (문자열 링크 : links) {linkqueue.addunvisedUrl (link); }}} // 메인 메소드 항목 공개 정적 무효 메인 (String [] args) {Crawler Crawler = New Crawler (); Crawler.crawling ( "http://www.douban.com/group/haixiuzu/discustion?start=0"); }}요약
위는 편집자가 소개 한 크롤링 웹 사이트 사진의 Java 구현을위한 예제 코드입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!