ฉันมักจะสงสัยเกี่ยวกับอินเทอร์เน็ต ฉันเคยคิดเกี่ยวกับการเขียนตัวรวบรวมข้อมูล แต่ฉันขี้เกียจเกินไปที่จะใช้มัน ฉันรู้สึกว่านี่เป็นสิ่งที่ลำบากมาก หากเกิดข้อผิดพลาดเล็ก ๆ น้อย ๆ ฉันจะต้องดีบักเวลามากซึ่งเสียเวลา
ต่อมาฉันคิดว่าเนื่องจากฉันได้รับประกันตัวเองก่อนฉันควรนำไปใช้ก่อนเริ่มต้นด้วยความเรียบง่ายเพิ่มฟังก์ชั่นอย่างช้าๆใช้งานถ้าฉันมีเวลาและเพิ่มประสิทธิภาพรหัสได้ตลอดเวลา
ด้านล่างนี้เป็นการใช้งานง่าย ๆ ของการรวบรวมข้อมูลหน้าเว็บที่ระบุและบันทึกไว้ ในความเป็นจริงมีหลายวิธีในการใช้งาน นี่คือการใช้งานหลายอย่างของฟังก์ชั่นนี้อย่างช้าๆ
การใช้งานการรวบรวมข้อมูล URLCONNECTION
แพ็คเกจ html; นำเข้า java.io.bufferedreader; นำเข้า java.io.fileoutputstream นำเข้า java.io.filewriter; นำเข้า java.io.ioexception; นำเข้า java.io.inputStreamreader; นำเข้า Java.io.outtreamwriter; java.net.url; นำเข้า java.net.urlconnection; สไปเดอร์ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สตริง filepath = "d: /124.html"; string url_str = "http://www.hao123.com/"; url url = null; ลอง {url = url ใหม่ (url_str); } catch (malformedurlexception e) {e.printstacktrace (); } string charset = "utf-8"; int sec_cont = 1000; ลอง {urlConnection url_con = url.openconnection (); url_con.setDooutput (จริง); url_con.setReadtimeout (10 * sec_cont); url_con.setRequestProperty ("ผู้ใช้ตัวแทน", "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 * คำอธิบาย: บันทึกสตริงเป็นไฟล์ * @param filepath * พา ธ ไฟล์ซึ่งจำเป็นต้องบันทึก * @param str * สตริงที่บันทึกไว้ * /โมฆะคงที่สาธารณะ savehtml fw.write (str); fw.flush ();*/ outputStreamWriter outs = new OutputStreamWriter (ใหม่ fileOutputStream (filePath, จริง), "UTF-8"); outs.write (str); System.out.print (Str); outs.close (); } catch (ioexception e) {system.out.println ("ข้อผิดพลาดที่บันทึก html ... "); E.PrintStackTrace (); }} / ** * เมธอด: inputStream2String * คำอธิบาย: ทำอินพุตกับสตริง * @param in_st * inputstream ซึ่งจำเป็นต้องแปลง * @param charset * encoder ของค่า * @throws ioexception * หากเกิดข้อผิดพลาด InputStreamReader (in_st, charset)); StringBuffer res = new StringBuffer (); สตริงบรรทัด = ""; ในขณะที่ ((line = buff.readline ())! = null) {res.append (บรรทัด); } return res.toString (); -ในระหว่างกระบวนการดำเนินการปัญหาของรหัสภาษาจีนที่อ่านไม่ออกของหน้าเว็บที่คลานเป็นสิ่งที่ค่อนข้างลำบาก
การใช้งานการรวบรวมข้อมูล httpClient
HttpClient พบปัญหามากมายเมื่อคลานหน้าเว็บ ครั้งแรกมี httpClient สองรุ่นหนึ่งคือดวงอาทิตย์ในตัวและอีกรุ่นหนึ่งเป็นโครงการของโอเพ่นซอร์สสำหรับ Apache ดูเหมือนว่าดวงอาทิตย์ไม่ได้อยู่ในตัวดังนั้นฉันจึงไม่ได้ใช้งาน แต่นำโครงการ 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.4.jar ในโฟลเดอร์ /lib (หมายเลขรุ่นแตกต่างกันไปขึ้นอยู่กับเวอร์ชันที่ดาวน์โหลดมา
ในที่สุดเพิ่มไฟล์ JAR ด้านบนลงใน classPath นั่นคือคลิกขวาที่ไฟล์โครงการ => bulid path => กำหนดค่า build path => เพิ่ม jar ภายนอก .. จากนั้นเพิ่มแพ็คเกจด้านบน
อีกวิธีหนึ่งคือการคัดลอกแพ็คเกจด้านบนโดยตรงไปยังโฟลเดอร์ LIB ภายใต้โฟลเดอร์โครงการ
นี่คือรหัสการใช้งาน:
แพ็คเกจ html; นำเข้า java.io.bufferedreader; นำเข้า java.io.fileoutputstream นำเข้า java.io.ioexception; นำเข้า java.io.InputStreamReader; นำเข้า java.io.InputStreamReader; นำเข้า java.io.oUtputStreamwriter; org.apache.http.httpresponse; นำเข้า org.apache.http.client.*; นำเข้า org.apache.http.client.methods.httpget; นำเข้า org.apache.http.impl.client.defaulthtpclient {// วิธีการที่สร้างขึ้นอัตโนมัติสตริงสตริงสตริง url_str = "http://www.hao123.com"; String charset = "UTF-8"; String filePath = "D: /125.HTML"; httpClient hc = ใหม่ defaulthttpClient (); httpget hg = ใหม่ httpget (url_str); การตอบสนอง httpresponse = hc.execute (Hg); HTTPENTITY Entity = Response.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 * คำอธิบาย: บันทึกสตริงเป็นไฟล์ * @param filepath * พา ธ ไฟล์ซึ่งจำเป็นต้องบันทึก * @param str * สตริงที่บันทึกไว้ * /โมฆะคงที่สาธารณะ savehtml fw.write (str); fw.flush ();*/ outputStreamWriter outs = new OutputStreamWriter (ใหม่ fileOutputStream (filePath, จริง), "UTF-8"); outs.write (str); outs.close (); } catch (ioexception e) {system.out.println ("ข้อผิดพลาดที่บันทึก html ... "); E.PrintStackTrace (); }} / ** * เมธอด: inputStream2String * คำอธิบาย: ทำอินพุตกับสตริง * @param in_st * inputstream ซึ่งจำเป็นต้องแปลง * @param charset * encoder ของค่า * @throws ioexception * หากเกิดข้อผิดพลาด InputStreamReader (in_st, charset)); StringBuffer res = new StringBuffer (); สตริงบรรทัด = ""; ในขณะที่ ((line = buff.readline ())! = null) {res.append (บรรทัด); } return res.toString (); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น