Eu sempre fui curioso sobre a Internet. Eu costumava pensar em escrever um rastreador, mas estava com preguiça de implementá -lo. Eu senti que isso era uma coisa muito problemática. Se ocorresse um pequeno erro, eu teria que depurar muito tempo, o que foi uma perda de tempo.
Mais tarde, pensei que, como me dei uma garantia mais cedo, deveria implementá -lo primeiro, começar com simplicidade, adicionar lentamente funções, implementar uma se tiver tempo e otimizar o código a qualquer momento.
Abaixo está uma implementação simples de rastejar uma página da web especificada e salvá -la. De fato, existem várias maneiras de implementá -lo. Aqui estão várias implementações dessa função lentamente.
Implementação de rastreamento de urlConnection
pacote html; importar java.io.bufferedReader; importar java.io.fileOutputStream; importar java.io.filewriter; importar java.io.ioException; importar java.io.inputStreamReader; import java.io.outputStrenwriter; import java.net.malFereade; java.net.url; importar 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 = nulo; tente {url = novo url (url_str); } catch (malformEdurlexception e) {e.printStackTrace (); } String charset = "utf-8"; int sec_cont = 1000; tente {urlConnection url_con = url.openconnection (); url_con.setdoOutput (true); url_con.SetReadTimeout (10 * sec_cont); url_con.setRequestProperty ("user-agent", "mozilla/4.0 (compatível; 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étodo: Salvehtml * Descrição: Salvar string para arquivo * @param filepath * caminho do arquivo que precisa ser salvo * @param str * string salvo * /public static void savehtml (string filepath, string str) {try { / * @superesswarnings ("resource") e fileStiter fw = file) 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 ("Erro em salvar html ..."); E.PrintStackTrace (); }} / ** * Método: InputStream2String * Descrição: Faça InputStream para String * @Param in_St * InputStream que precisa ser convertido * @param charset * codificador de valor * @HUTHSTURSTUSCCOTCECTION * se um erro ocorrer) / public static string inputStream2string (inputStumception em strings) InputStreamReader (in_st, charset)); StringBuffer res = new StringBuffer (); String line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}Durante o processo de implementação, o problema dos códigos chineses iluminados das páginas da web rastejadas é uma coisa relativamente problemática.
Implementação de rastreamento httpclient
O HTTPClient encontrou muitos problemas ao rastejar páginas da web. Primeiro, existem duas versões de httpclient. Um está embutido sol e o outro é um projeto de código aberto para o Apache. Parece que o Sun não está embutido, então eu não o implementei, mas adotei o projeto de código aberto Apache (o httpclient mencionado posteriormente refere-se à versão de código aberto do Apache); Segundo, ao usar o httpclient, a versão mais recente é diferente da versão anterior. Após a versão HTTPClient 4.x, os pacotes importados são diferentes. Muitas partes encontradas na Internet são a versão HTTPClient 3.x; portanto, se você usar a versão mais recente, é melhor olhar para o arquivo de ajuda.
Estou usando o Eclipse e preciso configurar o ambiente para importar o pacote de referência.
Primeiro, faça o download httpclient, o endereço é: http://hc.apache.org/downloads.cgi, estou usando o httpclient versão 4.2.
Em seguida, descompacte, encontre comuns-codec-1.6.jar, commons-logging-1.1.jar, httpclient -4.2.5.jar, httpcore -4.2.4.jar na pasta /lib (o número da versão varia dependendo da versão baixada e do primeiro jar, que não posso usar o tempo;
Por fim, adicione o arquivo JAR acima ao caminho de classe, ou seja, clique com o botão direito do mouse no arquivo do projeto => caminho do bulid => configure o caminho de construção => adicione jar externo .. e adicione o pacote acima.
Outro método é copiar diretamente o pacote acima para a pasta lib na pasta do projeto.
Aqui está o código de implementação:
pacote html; importar java.io.bufferedReader; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStreamReader; import java.io.inpactStreamReader; import java.io.outputSwriter; import; org.apache.http.httpResponse; importar org.apache.http.client. {// TODO Método Auto-Gerado Stub String url_str = "http://www.hao123.com"; String charset = "utf-8"; String filepath = "d: /125.html"; HttpClient hc = new DefaultTtpClient (); Httpget hg = novo httpget (url_str); Resposta HttpResponse = hc.execute (hg); Entidade httpentity = resposta.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); }} /** * Método: Salvehtml * Descrição: Salvar string para arquivo * @param filepath * caminho do arquivo que precisa ser salvo * @param str * string salvo * /public static void savehtml (string filepath, string str) {try { / * @superesswarnings ("resource") e fileStiter fw = file) 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 ("Erro em salvar html ..."); E.PrintStackTrace (); }} / ** * Método: InputStream2String * Descrição: Faça InputStream para String * @Param in_St * InputStream que precisa ser convertido * @param charset * codificador de valor * @HUTHSTURSTUSCCOTCECTION * se um erro ocorrer) / public static string inputStream2string (inputStumception em strings) InputStreamReader (in_st, charset)); StringBuffer res = new StringBuffer (); String line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.