最初のステップは、URLをリンクおよびフィルタリングおよび保存することです。
java.util.arraylistをインポートします。 java.util.collectionsをインポートします。 java.util.hashsetをインポートします。 java.util.listをインポートします。 java.util.setをインポートします。 public class linkqueue {//アクセスされたURLコレクションプライベート静的セット<String> visiturl = collections.synchronized(new Hashset <String>()); //アクセスURLプライベートstaticリスト<String> unvisitedurl = collections.synchronizedList(new ArrayList <String>()); // visited urlsはキューから外れていますpublic static string unvisitedurldequeue(){if(unvisitedurl.size()> 0){string url = unvisitedurl.remove(0); visitedurl.add(url); return url; } nullを返します。 } //新しいURLが追加されたときに検証し、パブリックvoid addunvisitedurl(string url){if(url!= null &&!url.trim( "")。 } // visited URLキューが空であるかどうかを決定しますpublic static boolean unvisitedurlsempty(){return unvisitedurl.isempty(); }}2番目のステップは、各URLとフィルターの下にリンクを収集して新しいリンクを生成することです。
java.util.hashsetをインポートします。 java.util.setをインポートします。 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; / ** * httpのURLをフィルターしてルールに準拠できるURLを取得します * @author Administrator * */ public class parserhttpurl {// Webサイトでリンクを取得すると、フィルターはリンクをフィルタリングします<string> extraclinks(string url、linkfilterフィルター){set <string> links = new hasset < try {parser parser = new Parser(url); // <frame>タグのフィルターをフィルターして、フレームタグnodefilter framefilter = new nodefilter(){public boolean accept(node.getText()。 } else {return false; }}}}; //フィルタリング<a>タグを設定するOrfilter、および<frame>タグorfilter linkfilter = new orfilter(new nodeclassfilter(linktag.class)、framefilter); //すべてのフィルタリングされたタグを取得しますnodelist list = parser.extractallnodesthatmatch(linkfilter); for(int i = 0; i <list.size(); i ++){node tag = list.elementat(i); if(tag instanceof 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"/> string frame = tag.getText()など、フレーム内のSRC属性へのリンクを抽出します。 int start = frame.indexof( "src ="); frame = frame.substring(start); int end = frame.indexof( ""); if(end == -1)end = frame.indexof( ">"); string frameurl = frame.substring(5、end -1); if(filter.accept(frameurl))links.add(frameurl); }} catch(parserexception e){e.printstacktrace(); }リンクを返します。 }}ステップ3:画像のダウンロード関数を実装します
java.io.fileをインポートします。 java.io.fileoutputStreamをインポートします。 java.io.inputStreamをインポートします。 java.net.urlをインポートします。 java.net.urlconnectionをインポートします。 java.util.arraylistをインポートします。 java.util.listをインポートします。 java.util.regex.matcherをインポートします。 java.util.regex.patternをインポートします。 / *** * Java Crawl Network Pictures * * @Author SwingLife * */ public class downloadpic {//プライベート静的な最終文字列ecoding = "utf-8"; // IMGタグを取得しますレギュラープライベートスタチック最終文字列imgurl_reg = "<img。*src =(。*?)[^>]*?>"; //通常のプライベート静的なstring imgsrc_reg = "http:/"?(。*?)(/"|> | // s+)"; public static void downloadpic(string url){// htmlテキストコンテンツ文字列html = nullを取得します; try {html = downloadpic.gethtml(url); } catch(Exception e){e.printstacktrace(); } if(null!= html &&! ""。equals(html)){//イメージタグリスト<string> imgurl = downloadpic.getimageurl(html); //画像SRCアドレスリスト<String> imgsrc = downloadpic.getimagesrc(imgurl); //画像をダウンロードlownowdolowdolloadpic.download(imgsrc); }} / *** * html contentを取得 * * @param url * @return * @throws例外 * / private static string gethtml(string url)throws exception {url uri = new url(url); urlconnection connection = uri.openconnection(); inputstream in = connection.getInputStream(); byte [] buf = new byte [1024]; int length = 0; stringbuffer sb = new StringBuffer(); while((length = in.read(buf、0、buf.length))> 0){sb.append(new String(buf、ecoding)); } in.close(); return 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(string image:listimageurl){matcher matcher = pattern.compile(imgsrc_reg).matcher(image); while(matcher.find()){listimgsrc.add(matcher.group()。substring(0、matcher.group()。length() - 1)); }} return listimgsrc; }/****画像をダウンロード** @param listimgsrc*/private static void download(list <string> listimgsrc){for(string url:listimgsrc){try {string imagename = url.substring(url.lastindexof( "/") + 1、url.length(); url uri = new url(url); inputstream in = uri.openstream(); fileoutputStream fo = new fileoutputStream(new file(imagename)); byte [] buf = new byte [1024]; int length = 0; while((length = in.read(buf、0、buf.length))!= -1){fo.write(buf、0、length); } in.close(); fo.close(); } catch(Exception e){e.printstacktrace(); }}}}実際のフィルターインターフェイス、フィルターインターフェイスを定義します。
パブリックインターフェイスフィルター{public boolean accept(string url); }ステップ4:フィルタリングルールの実装:
パブリッククラスのクローラー{ /** *クロールプロセス * * @return * @return Seeds * /public void crawling(string url){// define filter filter = newフィルター(){public boolean accept(string url){//フィルタリングルールは、クロールする必要があるウェブサイトのルールに従って変更されます。定期的な実装を使用することをお勧めします。私はdoubanのウェブサイトをrawっています(url.indexof( "douban.com/group/topic")!= -1 || url.indexof( "douban.com/group/haixiuzu/discussion?start")!= -1)return true;それ以外の場合はfalseを返します。 }}; // url queue linkqueue.addunvisitedurl(url)を初期化します。 //ループの条件、クロールするリンクは空ではありませんが(!linkqueue.unvisitedurlsempty()){//ヘッダーURLはキュー文字列visiturl =(string)linkqueue.unvisitedurldequeue()を終了します。 if(visiturl == null)継続; downloadloadpic.downloadpic(visiturl); //ダウンロードされたWebページからURLを抽出します<string> links = parserhttpurl.extraclinks(visiturl、filter); //(string link:links){linkqueue.addunvidedurl(link); }}} //メインメソッドエントリパブリックstatic void main(string [] args){crawler crawler = new Crawler(); crawler.crawling( "http://www.douban.com/group/haixiuzu/discussion?start=0"); }}要約します
上記は、編集者が紹介したクロールリングウェブサイトの写真のJava実装の例です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!