لقد كنت دائمًا فضوليًا بشأن الإنترنت. اعتدت أن أفكر في كتابة زاحف ، لكنني كنت كسولًا جدًا لتنفيذها. شعرت أن هذا كان شيئًا مزعجًا للغاية. إذا حدث خطأ صغير ، فسوف يتعين علي تصحيح الكثير من الوقت ، الذي كان مضيعة للوقت.
في وقت لاحق ، اعتقدت أنه نظرًا لأنني منحت نفسي ضمانًا مبكرًا ، يجب أن أقوم بتنفيذها أولاً ، والبدء بالبساطة ، وإضافة وظائف ببطء ، وتنفيذ واحدة إذا كان لدي وقت ، وتحسين الرمز في أي وقت.
فيما يلي تطبيق بسيط لزحف صفحة ويب محددة وحفظها. في الواقع ، هناك عدة طرق لتنفيذها. فيما يلي العديد من تطبيقات هذه الوظيفة ببطء.
URLCONNECTERECHENCE تنفيذ الزحف
package html ؛ import java.io.bufferedreader ؛ import java.io.fileOutputStream ؛ import java.io.filewRiter ؛ import java.io.ioException ؛ import java.io.inputstreamreader ؛ import java.io.itputStreamWriter ؛ import java.malformeDerlexation java.net.url ؛ import java.net.urlConnection ؛ spider الفئة العامة {public static void main (string [] args) {string filepath = "d: /124.html" ؛ String url_str = "http://www.hao123.com/" ؛ url url = null ؛ حاول {url = url جديد (url_str) ؛ } catch (malformedurlexception e) {e.printStackTrace () ؛ } charset = "utf-8" ؛ int sec_cont = 1000 ؛ حاول {urlConnection url_con = url.openconnection () ؛ url_con.setDooutput (true) ؛ 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 () ؛ String htm_str = inputStream2String (htm_in ، charset) ؛ SaveHtml (FilePath ، htm_str) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} /** * الطريقة: saveHtml * الوصف: حفظ السلسلة إلى ملف * param filepath * مسار الملف الذي يجب حفظه * param str * سلسلة محفوظة * /public static void savehtml (String filepath ، String str) {try { / * @ @ @"الموارد") fw.write (str) ؛ fw.flush () ؛*/ outputStreamWriter vech = new OutputStreamWriter (fileOutputStream جديد (FilePath ، true) ، "UTF-8") ؛ just.write (str) ؛ system.out.print (str) ؛ utt.close () ؛ } catch (ioException e) {system.out.println ("error at save html ...") ؛ E.PrintStackTrace () ؛ } ستر inputStreamReader (in_st ، charset)) ؛ stringBuffer res = new StringBuffer () ؛ خط السلسلة = "" ؛ بينما ((line = buff.readline ())! = null) {res.append (line) ؛ } return res.ToString () ؛ }}أثناء عملية التنفيذ ، تعد مشكلة الرموز الصينية المشوهة لصفحات الويب المزروعة أمرًا مزعجًا نسبيًا.
HTTPClient تنفيذ الزحف
واجه HTTPClient العديد من المشاكل عند زحف صفحات الويب. أولاً ، هناك نسختان من httpclient ، أحدهما عبارة عن أشعة الشمس المدمجة ، والآخر هو مشروع مفتوح المصدر لـ Apache. يبدو أن Sun غير مدمج ، لذلك لم أقم بتطبيقه ، لكنني اعتمدت مشروع Apache Open Source (يشير HTTPClient المذكور لاحقًا إلى الإصدار المفتوح من Apache) ؛ ثانياً ، عند استخدام HTTPClient ، يختلف الإصدار الأخير عن الإصدار السابق. بعد إصدار HTTPClient 4.x ، تختلف الحزم المستوردة. العديد من الأجزاء الموجودة على الإنترنت هي إصدار HTTPClient 3.x ، لذلك إذا كنت تستخدم أحدث إصدار ، فمن الأفضل أن ننظر إلى ملف المساعدة.
أنا أستخدم Eclipse وأحتاج إلى تكوين البيئة لاستيراد الحزمة المرجعية.
أولاً ، قم بتنزيل httpclient ، العنوان هو: http://hc.apache.org/downloads.cgi ، أنا أستخدم HTTPClient الإصدار 4.2.
بعد ذلك ، unzip ، ابحث عن المشاع-codec-1.6.jar ، commons-logging-1.1.jar ، httpclient-4.2.5.jar ، httpcore-4.2.4.jar في مجلد /lib (يختلف رقم الإصدار أولاً) ؛
أخيرًا ، أضف ملف JAR أعلاه إلى ClassPath ، أي انقر بزر الماوس الأيمن على ملف المشروع => Bulid Path => تكوين مسار الإنشاء => إضافة جرة خارجية .. ، ثم أضف الحزمة أعلاه.
هناك طريقة أخرى تتمثل في نسخ الحزمة أعلاه مباشرة إلى مجلد LIB ضمن مجلد المشروع.
هنا هو رمز التنفيذ:
حزمة html ؛ import java.io.bufferedreader ؛ استيراد java.io.fileOutputStream ؛ استيراد java.ioException ؛ استيراد java.io.inputstreamreader ؛ import java.io.inputstreamreader ؛ java.io.itputstreamwriter ؛ استيراد org.http.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp.htp. org.apache.http.httpresponse ؛ import org.apache.http.client.*؛ import org.apache.http.client.methods.httpget ؛ import org.apache.http.impl.client.devaulttpclient ؛ public class spiderhtpclient // todo method method 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 استجابة = hc.execute (hg) ؛ كيان httpentity = response.getentity () ؛ inputStream htm_in = null ؛ if (ectity! = null) {system.out.println (entity.getContentLength ()) ؛ htm_in = entity.getContent () ؛ String htm_str = inputStream2String (htm_in ، charset) ؛ SaveHtml (FilePath ، htm_str) ؛ }} /** * الطريقة: saveHtml * الوصف: حفظ السلسلة إلى ملف * param filepath * مسار الملف الذي يجب حفظه * param str * سلسلة محفوظة * /public static void savehtml (String filepath ، String str) {try { / * @ @ @"الموارد") fw.write (str) ؛ fw.flush () ؛*/ outputStreamWriter vech = new OutputStreamWriter (fileOutputStream جديد (FilePath ، true) ، "UTF-8") ؛ just.write (str) ؛ utt.close () ؛ } catch (ioException e) {system.out.println ("error at save html ...") ؛ E.PrintStackTrace () ؛ } ستر inputStreamReader (in_st ، charset)) ؛ stringBuffer res = new StringBuffer () ؛ خط السلسلة = "" ؛ بينما ((line = buff.readline ())! = null) {res.append (line) ؛ } return res.ToString () ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.