Saya selalu ingin tahu tentang internet. Dulu saya berpikir tentang menulis crawler, tetapi saya terlalu malas untuk mengimplementasikannya. Saya merasa ini adalah hal yang sangat merepotkan. Jika terjadi kesalahan kecil, saya harus men -debug banyak waktu, yang buang -buang waktu.
Kemudian, saya berpikir bahwa karena saya telah memberi diri saya jaminan lebih awal, saya harus mengimplementasikannya terlebih dahulu, mulai dengan kesederhanaan, perlahan menambah fungsi, mengimplementasikannya jika saya punya waktu, dan mengoptimalkan kode kapan saja.
Di bawah ini adalah implementasi sederhana merangkak halaman web tertentu dan menyimpannya. Bahkan, ada beberapa cara untuk mengimplementasikannya. Berikut adalah beberapa implementasi fungsi ini secara perlahan.
Implementasi merangkak urlconnection
Paket html; impor java.io.bufferedReader; impor java.io.fileoutputstream; impor java.io.filewriter; import java.io.ioException; import java.io.inputStreamreader; impor java.io.outputStreamwriter; impor java.netrexceptexceptexcept; java.net.url; impor java.net.urlconnection; kelas publik spider {public static void main (string [] args) {string filepath = "d: /124.html"; String url_str = "http://www.hao123.com/"; Url url = null; coba {url = url baru (url_str); } catch (MalFormedurlexception e) {e.printstacktrace (); } String charset = "UTF-8"; int sec_cont = 1000; coba {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 (); }} /** * Metode: savehtml * Deskripsi: simpan string ke file * @param filepath * path file yang perlu disimpan * @param str * disimpan * /public static void savehtml (string filePath, string str) {coba { / * @suppresswarnings ("sumber daya") filewiter fw = fw = / * @SuppressWarnings ("sumber daya") filewiter fw = fw = / * @SuppressWarnings ("sumber daya") FileWriter fw = fw = /{ / * @Suppresswarnings ("Sumber data") FileWriter fw = fw = /{ / * @Suppresswarnings ("Sumber (") fw.write (str); fw.flush ();*/ outputStreamWriter outs = outputStreamWriter baru (FileOutputStream baru (FilePath, true), "UTF-8"); outs.write (str); System.out.print (str); outs.close (); } catch (ioException e) {System.out.println ("Kesalahan di simpan html ..."); e.printstacktrace (); } } /** * Method: InputStream2String * Description: make InputStream to String * @param in_st * inputstream which need to be converted * @param charset * encoder of value * @throws IOException * if an error occurred */ public static String InputStream2String(InputStream in_st,String charset) throws IOException{ BufferedReader buff = new BufferedReader (InputStreamReader baru (in_st, charset)); StringBuffer res = new StringBuffer (); String line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}Selama proses implementasi, masalah kode -kode web yang kacau dari halaman web yang dirangkak adalah hal yang relatif merepotkan.
Implementasi merangkak httpclient
HTTPClient menghadapi banyak masalah saat merangkak halaman web. Pertama, ada dua versi httpclient, satu adalah matahari bawaan, dan yang lainnya adalah proyek open source for apache. Tampaknya Sun tidak built-in, jadi saya tidak mengimplementasikannya, tetapi mengadopsi proyek open source Apache (httpClient yang disebutkan kemudian mengacu pada versi open source Apache); Kedua, saat menggunakan HTTPClient, versi terbaru berbeda dari versi sebelumnya. Setelah versi HTTPClient 4.x, paket yang diimpor berbeda. Banyak bagian yang ditemukan di internet adalah versi httpclient 3.x, jadi jika Anda menggunakan versi terbaru, lebih baik melihat file bantuan.
Saya menggunakan Eclipse dan perlu mengkonfigurasi lingkungan untuk mengimpor paket referensi.
Pertama, unduh httpclient, alamatnya adalah: http://hc.apache.org/downloads.cgi, saya menggunakan httpClient versi 4.2.
Kemudian, unzip, temukan commons-codec-1.6.jar, commons-logging -.1.jar, httpclient-4.2.5.jar, httpcore-4.2.4.jar di folder /lib (nomor versi bervariasi tergantung pada versi yang diunduh, dan ada file stoph lainnya, yang tidak dapat saya gunakan untuk waktu yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, dan ada yang diimpor, dan ada yang diimpor, dan ada yang diimpor, dan ada yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan, yang diperlukan,
Akhirnya, tambahkan file jar di atas ke classpath, yaitu klik kanan file proyek => bulid path => configure build path => tambahkan toples eksternal .., dan kemudian tambahkan paket di atas.
Metode lain adalah secara langsung menyalin paket di atas ke folder LIB di bawah folder proyek.
Ini kode implementasinya:
Paket html; impor java.io.bufferedReader; import java.io.fileoutputStream; impor java.io.ioException; impor java.iPutStreamReader; import java.io.inputStreader; impor java.io.outputstreamwriter; impor org.apstreamreader; org.apache.http.httpresponse; import org.apache.http.client.*; impor org.apache.http.client.methods.httpget; impor org.apache.htp.implent.client.defaultpget; Exception {// TODO Metode yang dihasilkan otomatis Stub string URL_STR = "http://www.hao123.com"; String charset = "UTF-8"; String filepath = "d: /125.html"; HttpClient hc = DEFAULTHTTPCLIENT () baru; Httpget hg = httpget baru (url_str); Httpresponse respons = hc.execute (hg); Httpentity entitas = 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); }} /** * Metode: savehtml * Deskripsi: simpan string ke file * @param filepath * path file yang perlu disimpan * @param str * disimpan * /public static void savehtml (string filePath, string str) {coba { / * @suppresswarnings ("sumber daya") filewiter fw = fw = / * @SuppressWarnings ("sumber daya") filewiter fw = fw = / * @SuppressWarnings ("sumber daya") FileWriter fw = fw = /{ / * @Suppresswarnings ("Sumber data") FileWriter fw = fw = /{ / * @Suppresswarnings ("Sumber (") fw.write (str); fw.flush ();*/ outputStreamWriter outs = outputStreamWriter baru (FileOutputStream baru (FilePath, true), "UTF-8"); outs.write (str); outs.close (); } catch (ioException e) {System.out.println ("Kesalahan di simpan html ..."); e.printstacktrace (); } } /** * Method: InputStream2String * Description: make InputStream to String * @param in_st * inputstream which need to be converted * @param charset * encoder of value * @throws IOException * if an error occurred */ public static String InputStream2String(InputStream in_st,String charset) throws IOException{ BufferedReader buff = new BufferedReader (InputStreamReader baru (in_st, charset)); StringBuffer res = new StringBuffer (); String line = ""; while ((line = buff.readline ())! = null) {res.append (line); } return res.toString (); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.