Ich war immer neugierig auf das Internet. Früher habe ich darüber nachgedacht, einen Crawler zu schreiben, aber ich war zu faul, um ihn umzusetzen. Ich hatte das Gefühl, dass dies eine sehr mühsame Sache war. Wenn ein kleiner Fehler aufgetreten ist, müsste ich viel Zeit debuggen, was Zeitverschwendung war.
Später dachte ich, da ich mir früh eine Garantie gegeben hatte, sollte ich es zuerst implementieren, mit Einfachheit beginnen, die Funktionen langsam hinzufügen, einen implementieren, wenn ich Zeit habe, und den Code jederzeit optimieren.
Nachfolgend finden Sie eine einfache Implementierung des Krabbelns einer bestimmten Webseite und des Speicherns. Tatsächlich gibt es verschiedene Möglichkeiten, es umzusetzen. Hier sind einige Implementierungen dieser Funktion langsam.
UrlConnection Crawling Implementierung
Paket html; import java.io.bufufferedReader; import Java.io.FileOutputStream; Import Java.io.FileWriter; Import Java.io.ioException; Import Java.io.inputStreamReader; 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; try {url = new url (url_str); } catch (fehl Formaledurlexception 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 (kompatibel; MSIE 7.0; Windows NT 5.1)"); InputStream htm_in = url_con.getInputStream (); String htm_str = inputStream2string (htm_in, charSet); SaveHtml (filepath, htm_str); } catch (ioException e) {e.printstacktrace (); }} /** * Methode: saveHtml * Beschreibung: Zeichenfolge in Datei speichern * @param filepath * Dateipfad, die gespeichert werden müssen fw.write (str); fw.flush ();*/ outputStreamwriter outs = new outputStreamWriter (neuer FileOutputStream (Filepath, True), "UTF-8"); outs.write (str); System.out.print (str); outs.close (); } catch (ioException e) {System.out.println ("Fehler bei speichern html ..."); E. printstacktrace (); }} / ** * Methode: InputStream2String * Beschreibung: InputStream zu String * @param in_st * InputStream, der konvertiert werden muss InputStreamReader (in_st, charSet)); StringBuffer res = new StringBuffer (); String line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}Während des Implementierungsprozesses ist das Problem der verstümmelten chinesischen Codes der gekrabbten Webseiten eine relativ störende Sache.
Httpclient Crawling Implementierung
HTTPCLIENT traf auf viele Probleme beim Kriechen auf Webseiten. Erstens gibt es zwei Versionen von HTTPClient, einer ist eingebaute Sonne und das andere ist ein Projekt von Open Source für Apache. Es scheint, dass Sun nicht integriert ist, daher habe ich es nicht implementiert, sondern das Apache Open-Source-Projekt angenommen (der später erwähnte HTTPCLISE bezieht sich auf die Open-Source-Version von Apache). Zweitens unterscheidet sich die neueste Version von der vorherigen Version bei der Verwendung von httpclient. Nach der HTTPCLIENT 4.x -Version sind die importierten Pakete unterschiedlich. Viele im Internet gefundene Teile sind die HTTPCLIENT 3.x -Version. Wenn Sie also die neueste Version verwenden, ist es besser, sich die Hilfedatei anzusehen.
Ich verwende Eclipse und muss die Umgebung zum Importieren des Referenzpakets konfigurieren.
Download httpclient download, die Adresse lautet: http://hc.apache.org/downloads.cgi, ich verwende httpclient Version 4.2.
Dann finden Sie Commons-codec-1.6.jar, Commons-Logging-1.1.jar, httpclient-4.2.5.jar, httpcore-4..4.jar im /lib-Ordner (die Versionsnummer variiert abhängig von der heruntergeladenen Version, und es gibt andere JAR-Dateien, die nicht zuerst importiert werden können.
Fügen Sie schließlich die obige JAR-Datei zum Klassenpfad hinzu, dh klicken Sie mit der rechten Maustaste auf die Projektdatei => Bulid Path => Configure Build Path => External Jar hinzufügen. Fügen Sie dann das obige Paket hinzu.
Eine andere Methode besteht darin, das obige Paket direkt in den Lib -Ordner im Projektordner zu kopieren.
Hier ist der Implementierungscode:
Paket html; import java.io.bufufferedReader; import Java.io.FileOutputStream; Import Java.io.ioException; Import Java.io.inputStreamReader; Import Java.io.inputStreamReader; Import Java.io.outputStreamwriter; Importewritor; Importeamwriter; org.apache.http.httpresponse; import org.apache.http.client. {// Todo automatisch generierter Methode Stub String url_str = "http://www.hao123.com"; String charset = "utf-8"; String filepath = "d: /125.html"; Httpclient hc = new Defaulthttpclient (); Httpget hg = new httpget (url_str); HttPresponse response = hc.execute (hg); Httpentity entity = response.getEntity (); InputStream htm_in = null; if (entity! = null) {System.out.println (entity.getContentLength ()); htm_in = entity.getContent (); String htm_str = inputStream2string (htm_in, charSet); SaveHtml (filepath, htm_str); }} /** * Methode: saveHtml * Beschreibung: Zeichenfolge in Datei speichern * @param filepath * Dateipfad, die gespeichert werden müssen fw.write (str); fw.flush ();*/ outputStreamwriter outs = new outputStreamWriter (neuer FileOutputStream (Filepath, True), "UTF-8"); outs.write (str); outs.close (); } catch (ioException e) {System.out.println ("Fehler bei speichern html ..."); E. printstacktrace (); }} / ** * Methode: InputStream2String * Beschreibung: InputStream zu String * @param in_st * InputStream, der konvertiert werden muss InputStreamReader (in_st, charSet)); StringBuffer res = new StringBuffer (); String line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.