الخطوة الأولى هي تنفيذ Linkqueue وتصفية وتخزين عناوين URL.
استيراد java.util.arraylist ؛ استيراد java.util.collections ؛ استيراد java.util.hashset ؛ استيراد java.util.list ؛ استيراد java.util.set ؛ Class Public Class Linkqueue {// Collection URL Collection Private Static Set <String> visitedurl = collections.synchronizedSet (Hashset <String> () جديد) ؛ // UNACEDUR URL قائمة ثابتة خاصة <STRING> UNVISITEDURL = COLLECTIONS.SENCHRONISTERLIST (ARRAYLIST NEW ARTH> ()) ؛ . VisitedUrl.add (url) ؛ إرجاع عنوان URL ؛ } إرجاع فارغ ؛ } // تحقق من إضافة عنوان URL جديد ، مما يضمن إضافته مرة واحدة فقط مرة واحدة ثابتة عامة addunvisitedurl (سلسلة url) {if (url! = null &&! url.trim (). equals ("") &&! } // تحديد ما إذا كانت قائمة انتظار URL غير الموروقة هي الفارغة الفارغة المنطقية الثابتة غير مصارعة على unvisitedurlsempty () {return unvisitedurl.isempty () ؛ }}الخطوة الثانية هي جمع الروابط تحت كل عنوان URL وتصفية لإنشاء روابط جديدة.
استيراد java.util.hashset ؛ استيراد java.util.set ؛ استيراد org.htmlparser.node ؛ استيراد org.htmlparser.nodefilter ؛ استيراد org.htmlparser.parser ؛ استيراد org.htmlparser.filters.nodeclassfilter ؛ استيراد org.htmlparser.filters.orfilter ؛ استيراد org.htmlparser.tags.linktag ؛ استيراد org.htmlparser.util.nodelist ؛ استيراد org.htmlparser.util.parserexception ؛ / ** * Filter HTTP URL للحصول على عناوين URL التي يمكنها الامتثال للقواعد * Authorator * */ public class parserhttpurl {// الحصول على رابط على موقع ويب ، يتم استخدام مرشح لتصفية الروابط الثابتة العامة <string> خارج الخط (url url ، linkfilter filter) حاول {parser parser = new parser (url) ؛ // تصفية مرشح علامة <fray> لاستخراج الرابط الذي يمثله سمة SRC في إطار العلامة nodefilter framefilter = new NodeFilter () {public boolean قبول (عقدة node) {if (node.gettext (). startswith ("الإطار src =")) {return true ؛ } آخر {return false ؛ }}}} ؛ // orfilter لتعيين علامات التصفية <a> ، و <rame> العلامات orfilter linkfilter = new orfilter (nodeClassFilter (linktag.class) ، FrameFilter) ؛ // احصل على جميع العلامات المصفاة nodelist قائمة = parser.extractallnodesthatmatch (LinkFilter) ؛ لـ (int i = 0 ؛ i <list.size () ؛ i ++) {node tag = list.elementat (i) ؛ if (tag extureof linktag) // <a> tag {linktag link = (linktag) tag ؛ سلسلة linkurl = link.getLink () ؛ // url if (filter.accept (linkurl)) links.add (linkurl) ؛ } else // <rame> tag {// استخراج الرابط إلى سمة SRC في الإطار ، مثل <frame src = "test.html"/> string frame = tag.getText () ؛ int start = frame.indexof ("src =") ؛ الإطار = frame.substring (ابدأ) ؛ int end = frame.indexof ("") ؛ if (end == -1) end = frame.indexof (">") ؛ String FrameUrl = frame.substring (5 ، End - 1) ؛ if (filter.accept (frameurl)) links.add (frameurl) ؛ }} catch (parserexception e) {E.PrintStackTrace () ؛ } روابط الإرجاع ؛ }}الخطوة 3: تنفيذ وظيفة تنزيل الصورة
استيراد java.io.file ؛ استيراد java.io.fileOutputStream ؛ استيراد java.io.inputstream ؛ استيراد java.net.url ؛ استيراد java.net.urlconnection ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد java.util.regex.matcher ؛ استيراد java.util.regex.pattern ؛ / *** * صور شبكة Java Crawl * * Author SwingLife * */ فئة عامة تنزيل {// ترميز السلسلة النهائية الثابتة الخاصة = "UTF-8" ؛ // احصل على علامة IMG العادية الخاصة بسلسلة Final Final Imgurl_reg = "<img.*src = (.*؟) [^>]*؟>" ؛ // احصل على السلسلة النهائية الثابتة الخاصة العادية imgsrc_reg = "http:/"؟ (.*؟) (/"|> | // s+)" ؛ تنزيل باطل ثابت عام (url url) {// احصل على سلسلة محتوى النص html html = null ؛ حاول {html = downloadpic.gethtml (url) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } if (null! = html &&! " // احصل على قائمة عناوين الصورة src <string> imgsrc = downloadpic.getImagesRc (imgurl) ؛ // قم بتنزيل Image DownloadPilpic.Download (IMGSRC) ؛ }} / *** * احصل على html content * * param url * return * @throws استثناء * / سلسلة ثابتة gethtml (url url string) رمي الاستثناء {url uri = url new (url) ؛ اتصال urlConnection = uri.openconnection () ؛ inputStream في = connection.getInputStream () ؛ Byte [] buf = new byte [1024] ؛ طول int = 0 ؛ StringBuffer SB = New StringBuffer () ؛ بينما ((طول = in.read (buf ، 0 ، buf.length))> 0) {sb.append (سلسلة جديدة (buf ، ecoding)) ؛ } in.close () ؛ إرجاع sb.tostring () ؛ } / *** * احصل على عنوان ImageUrl * * param html * @RETURN * / قائمة ثابتة خاصة <string> getImageurl (String html) {matcher matcher = pattern.compile (imgurl_reg) .Matcher (html) ؛ قائمة <Tring> listimgurl = new ArrayList <String> () ؛ بينما (matcher.find ()) {listimgurl.add (matcher.group ()) ؛ } return listimgurl ؛ } / *** * احصل على عنوان الصور * * param listimageurl * regurn * / قائمة ثابتة خاصة <string> getImagesRc (قائمة <Tring> listimageurl) {list <string> listimgsrc = new ArrayList <String> () ؛ لـ (صورة السلسلة: listimageurl) {matcher matcher = pattern.compile (imgsrc_reg) .Matcher (Image) ؛ بينما (matcher.find ()) {listimgsrc.add (matcher.group (). substring (0 ، matcher.group (). length () - 1)) ؛ }} return listimgsrc ؛ }/**** تنزيل صورة** param listimgsrc*/تنزيل باطل ثابت خاص (قائمة <Tring> listimgsrc) {for (url url: listimgsrc) {try {String imageName = url.substring (url.lastindexof ("/") + 1 ، url.lenge ()) ؛ url uri = url new url (url) ؛ inputStream في = uri.openstream () ؛ fileOutputStream fo = new FileOutputStream (ملف جديد (ImageName)) ؛ Byte [] buf = new byte [1024] ؛ طول int = 0 ؛ بينما ((طول = in.read (buf ، 0 ، buf.length))! = -1) {fo.write (buf ، 0 ، length) ؛ } in.close () ؛ fo.close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}}}واجهة المرشح الحقيقي ، تحديد واجهة المرشح:
مرشح الواجهة العامة {Public Boolean Accept (url url) ؛ }الخطوة 4: تنفيذ قواعد التصفية:
CRAWLER Public Crawler { /** * عملية الزحف * * return * Param Seeds * /public void crawling (string url) {// define filter filter filter = new filter () {public boolean account (String url) {// قواعد التصفية هنا تم تغييرها وفقًا لقواعد المواقع التي تحتاج إلى أن تكون موجهة. يوصى باستخدام التنفيذ العادي. أنا زحف موقع Douban على الويب إذا (url.indexof ("douban.com/group/topic")! = -1 || url.indexof ("douban.com/group/haixiuzu/discussion؟start")! = -1) return true ؛ عودة أخرى خاطئة. }} ؛ // تهيئة url queue linkqueue.addunvisitedurl (url) ؛ // حالة حلقة ، فإن الرابط المراد زحفه ليس فارغًا بينما (! linkqueue.unvisitedurlsempty ()) {// يخرج عنوان URL الرئيسي من سلسلة الانتظار Visiturl = (String) linkqueue.unvisitedurldequeue () ؛ إذا (visiturl == null) تابع ؛ downloadpoppic.downloadpic (visiturl) ؛ . . }}} // إدخال الأسلوب الرئيسي في الفراغ الثابت الرئيسي (String [] args) {Crawler Crawler = New Crawler () ؛ crawler.crawling ("http://www.douban.com/group/haixiuzu/discussion؟start=0") ؛ }}لخص
ما ورد أعلاه هو رمز المثال لتنفيذ Java لتنفيذ صور موقع الزحف الذي أدخله المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!