J'ai toujours été curieux d'Internet. J'avais l'habitude d'écrire un robot, mais j'étais trop paresseux pour le mettre en œuvre. Je sentais que c'était une chose très gênante. Si une petite erreur se produisait, je devrais déboguer beaucoup de temps, ce qui était une perte de temps.
Plus tard, j'ai pensé que depuis que je m'étais donné une garantie tôt, je devrais le mettre en œuvre en premier, commencer par la simplicité, ajouter lentement des fonctions, implémenter une si j'ai le temps et optimiser le code à tout moment.
Vous trouverez ci-dessous une simple implémentation de ramper une page Web spécifiée et de l'enregistrer. En fait, il existe plusieurs façons de la mettre en œuvre. Voici plusieurs implémentations de cette fonction lentement.
Implémentation rampante d'urlconnection
package html; import java.io.bufferedReader; import java.io.fileoutputStream; import java.io.filewriter; import java.io.ioexception; import java.io.inputstreamreader. java.net.url; import java.net.urlconnection; classe publique Spider {public static void main (String [] args) {String filepath = "d: /124.html"; Chaîne url_str = "http://www.hao123.com/"; Url url = null; essayez {url = new url (url_str); } catch (malformEdUrException 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 (compatible; 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 (); }} / ** * Méthode: sauvehtml * Description: Enregistrez la chaîne dans le fichier * @param filepath * chemin de fichier qui doit être enregistré * @param str * String Saved * / public static void SaveHtml (String Filepath, String str) {try {/ * @ supresswarnings ("Resource") filewriter fw = newwriter (filePath); fw.write (str); fw.flush (); * / outputStreamWriter out = new OutputStreamWriter (new FileOutputStream (filepath, true), "utf-8"); OutS.Write (STR); System.out.print (STR); OutS.close (); } catch (ioException e) {System.out.println ("Erreur à Save Html ..."); e.printStackTrace (); }} / ** * Méthode: InputStream2String * Description: Faites de l'inputStream vers String * @param in_st * inputStream qui doit être converti * @param charset * Encodeur de valeur * @Throws ioException * Si une erreur s'est produite * / public static string InputStream2String (inputStream in_st charset) throws ioException {buffredreder buffer buffer buffrererererered) throws ioException {buffredReder buffer buffer buffer. InputStreamReader (in_st, charset)); StringBuffer res = new StringBuffer (); Chaîne line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}Au cours du processus de mise en œuvre, le problème des codes chinois brouillés des pages Web rampés est une chose relativement gênante.
Implémentation rampante de HttpClient
HttpClient a rencontré de nombreux problèmes lors de la rampe de pages Web. Tout d'abord, il existe deux versions de HttpClient. L'un est le soleil intégré et l'autre est un projet d'open source pour Apache. Il semble que le soleil ne soit pas intégré, donc je ne l'ai pas mis en œuvre, mais j'ai adopté le projet open source Apache (le httpclient mentionné se réfère plus tard à la version open source d'Apache); Deuxièmement, lors de l'utilisation de HTTPClient, la dernière version est différente de la version précédente. Après la version HTTPClient 4.x, les packages importés sont différents. De nombreuses pièces trouvées sur Internet sont la version httpclient 3.x, donc si vous utilisez la dernière version, il est préférable de consulter le fichier d'aide.
J'utilise Eclipse et je dois configurer l'environnement pour importer le package de référence.
Tout d'abord, téléchargez httpclient, l'adresse est: http://hc.apache.org/downloads.cgi, j'utilise la version 4.2 httpclient.
Ensuite, unzip, recherchez Commons-Codec-1.6.jar, Commons-Logging-1.1.jar, httpclient-4.2.5.jar, httpcore-4.2.4.jar dans le dossier / lib (le numéro de version varie en fonction de la version requise, et il y a d'autres fichiers JAR, que je ne peux pas utiliser pour le moment, donc Important les obligatoires, et il y a d'autres fichiers JAR, que je ne peux pas utiliser pour le moment, donc Important les obligatoires, ce qui est nécessaire, et il y a d'autres fichiers JAR, que je ne peux pas utiliser pour le moment, donc Important les obligatoires en premier);
Enfin, ajoutez le fichier JAR ci-dessus au ClassPath, c'est-à-dire, cliquez avec le bouton droit sur le fichier de projet => Bulid Path => Configurer Build Path => Ajouter un jar externe .., puis ajouter le package ci-dessus.
Une autre méthode consiste à copier directement le package ci-dessus dans le dossier lib dans le dossier du projet.
Voici le code d'implémentation:
Package html; import java.io.buffereDReader; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputstreamreader; import java.io.inputstreamreader; import java.io.outputStreamwriter; Import Org.apache.http. org.apache.http.httpResponse; import org.apache.http.client. *; import org.apache.http.client.methods.httpget; import org.apache.http.impl.client.defaulthTTPClient; Classe publique Spiderhttpclient {public STATIC STATIC VODOJ {// TODO Méthode générée automatiquement 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 (entité.getContentLength ()); htm_in = entity.getContent (); String htm_str = inputStream2String (htm_in, charset); SAVEHTML (FilePath, HTM_STR); }} / ** * Méthode: sauvehtml * Description: Enregistrez la chaîne dans le fichier * @param filepath * chemin de fichier qui doit être enregistré * @param str * String Saved * / public static void SaveHtml (String Filepath, String str) {try {/ * @ supresswarnings ("Resource") filewriter fw = newwriter (filePath); fw.write (str); fw.flush (); * / outputStreamWriter out = new OutputStreamWriter (new FileOutputStream (filepath, true), "utf-8"); OutS.Write (STR); OutS.close (); } catch (ioException e) {System.out.println ("Erreur à Save Html ..."); e.printStackTrace (); }} / ** * Méthode: InputStream2String * Description: Faites de l'inputStream vers String * @param in_st * inputStream qui doit être converti * @param charset * Encodeur de valeur * @Throws ioException * Si une erreur s'est produite * / public static string InputStream2String (inputStream in_st charset) throws ioException {buffredreder buffer buffer buffrererererered) throws ioException {buffredReder buffer buffer buffer. InputStreamReader (in_st, charset)); StringBuffer res = new StringBuffer (); Chaîne line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.