私はいつもインターネットに興味があります。私はクローラーを書くことを考えていましたが、私はそれを実装するのが面倒でした。これは非常に厄介なことだと感じました。小さなエラーが発生した場合、私は多くの時間をデバッグする必要があります。これは時間の無駄でした。
後で、私は自分自身に早期に保証を与えたので、最初にそれを実装し、シンプルさから始め、ゆっくりと関数を追加し、時間がある場合は1つを実装し、いつでもコードを最適化する必要があると思いました。
以下は、指定されたWebページをクロールして保存する簡単な実装です。実際、それを実装するにはいくつかの方法があります。この関数のいくつかの実装をゆっくりと示します。
urlconnectionクロール実装
パッケージhtml; import java.io.bufferedReader; Import java.io.fileoutputStream; Import java.io.filewriter; Import java.io.io.io.io.io.io.io.IonputStreamReader; Import java.OutputStreamWriter; Import.net.net.net.mal -lexturlexception; java.net.url; import java.net.urlconnection; public class spider {public static void main(string [] args){string filepath = "d:/124.html"; string url_str = "http://www.hao123.com/"; url url = null; {url = new url(url_str); } catch(malformedurlexception e){e.printstacktrace(); } string charset = "utf-8"; int sec_cont = 1000; try {urlconnection url_con = url.openconnection(); url_con.setdooutput(true); url_con.setreadtimeout(10 * sec_cont); url_con.setRequestProperty( "user-agent"、 "mozilla/4.0(互換; msie 7.0; windows nt 5.1)"); inputstream htm_in = url_con.getInputStream();文字列htm_str = inputstream2string(htm_in、charset); savehtml(filepath、htm_str); } catch(ioexception e){e.printstacktrace(); }} /** *メソッド:savehtml *説明:stringをファイルに保存 * @param filepath *保存する必要があるファイルパス * @param str * string saved * /public static void savehtml(string filepath、string str){try { / * @suppresswarnings( "resource")filewriter fw = new filewriter(filepath); fw.write(str); fw.flush();*/ outputStreamWriter outs = new outputStreamWriter(new FileOutputStream(filepath、true)、 "utf-8"); outs.write(str); System.out.print(str); outs.close(); } catch(ioException e){system.out.println( "save html ..."); e.printstacktrace(); }} / ** * method:inputstream2string *説明:inputstreamにstringにinputStreamを作成 * @param in_st * inputStreamを変換する必要がある * @param charset * @param charset * @throws ioexception * @throws ioexception * / public static string inputstream2string(inputstream in_st) inputStreamReader(in_st、charset)); stringbuffer res = new StringBuffer();文字列line = ""; while((line = buff.readline())!= null){res.append(line); } RES.TOSTRING(); }}実装プロセス中、rawったWebページの中国の文字化けのコードの問題は、比較的厄介なことです。
httpclientクロール実装
httpclientは、Webページをrawったときに多くの問題に遭遇しました。まず、httpclientには2つのバージョンがあります。 1つは太陽が組み込まれており、もう1つはApacheのオープンソースのプロジェクトです。 Sunは組み込まれていないように思われるため、実装しませんでしたが、Apache Open Sourceプロジェクトを採用しました(後で言及したHTTPClientは、Apacheのオープンソースバージョンを参照しています)。第二に、HTTPClientを使用する場合、最新バージョンは以前のバージョンとは異なります。 HTTPCLIENT 4.Xバージョンの後、インポートされたパッケージは異なります。インターネットで見つかった多くの部品はhttpclient 3.xバージョンです。したがって、最新バージョンを使用する場合は、ヘルプファイルを確認することをお勧めします。
私はEclipseを使用しており、参照パッケージをインポートするために環境を構成する必要があります。
まず、httpclientをダウンロードします。アドレスは次のとおりです。http://hc.apache.org/downloads.cgi、httpclientバージョン4.2を使用しています。
次に、Unzip、Commons-Codec-1.6.jar、Commons-Logging-1.1.jar、httpclient-4.2.5.jar、httpcore-4.2.4.jarを /libフォルダーのjar(バージョン番号はダウンロードバージョンによって異なります。
最後に、上記のJARファイルをClassPathに追加します。つまり、プロジェクトファイルを右クリックします=> bulid path =>ビルドパス=>外部jar ..を追加し、上記のパッケージを追加します。
別の方法は、上記のパッケージをプロジェクトフォルダーの下のLIBフォルダーに直接コピーすることです。
これが実装コードです:
パッケージhtml; import java.io.bufferedReader; Import java.io.fileoutputStream; Import java.io.ioexception; Import java.io.inputStreamReader; Impate java.io.inputStreamReader; Import Java.io.OutputStreamWriter; Import.Http.httpentity; org.apache.http.httpresponse; Import org.apache.http.client。*; Import org.apache.http.client.methods.httpget; import org.apache.http.impl.client.defaulthttpclice; {// todo auto-enerated method stist string url_str = "http://www.hao123.com";文字列charset = "utf-8"; string filepath = "d:/125.html"; httpclient hc = new defaulthttpclient(); httpget hg = new httpget(url_str); httpresponse応答= hc.execute(hg); httpentity entity = respons.getEntity(); inputstream htm_in = null; if(entity!= null){system.out.println(entity.getContentLength()); htm_in = entity.getContent();文字列htm_str = inputstream2string(htm_in、charset); savehtml(filepath、htm_str); }} /** *メソッド:savehtml *説明:stringをファイルに保存 * @param filepath *保存する必要があるファイルパス * @param str * string saved * /public static void savehtml(string filepath、string str){try { / * @suppresswarnings( "resource")filewriter fw = new filewriter(filepath); fw.write(str); fw.flush();*/ outputStreamWriter outs = new outputStreamWriter(new FileOutputStream(filepath、true)、 "utf-8"); outs.write(str); outs.close(); } catch(ioException e){system.out.println( "save html ..."); e.printstacktrace(); }} / ** * method:inputstream2string *説明:inputstreamにstringにinputStreamを作成 * @param in_st * inputStreamを変換する必要がある * @param charset * @param charset * @throws ioexception * @throws ioexception * / public static string inputstream2string(inputstream in_st) inputStreamReader(in_st、charset)); stringbuffer res = new StringBuffer();文字列line = ""; while((line = buff.readline())!= null){res.append(line); } RES.TOSTRING(); }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。