ขั้นตอนแรกคือการใช้ URL LinkQueue และตัวกรองและจัดเก็บ
นำเข้า java.util.arraylist; นำเข้า Java.util.Collections; นำเข้า java.util.hashset; นำเข้า java.util.list; นำเข้า java.util.set; Linkqueue คลาสสาธารณะ {// Accessed URL Collection Set Static ส่วนตัว <String> VisitedUrl = Collections.synchronizedset (ใหม่ HashSet <String> ()); // URL ที่ไม่ได้รับ URL รายการคงที่ส่วนตัว <String> unvisitedUrl = collections.synchronizedList (arraylist ใหม่ <String> ()); // URL ที่ไม่ได้รับการตรวจสอบออกจากคิวสาธารณะสตริงคงที่ unvisitedurldequeue () {ถ้า (unvisitedurl.size ()> 0) {string url = unvisitedurl.remove (0); Visitedurl.add (URL); url กลับ; } return null; } // ตรวจสอบเมื่อมีการเพิ่ม URL ใหม่เพื่อให้แน่ใจว่ามันจะถูกเพิ่มเพียงเมื่อโมฆะสาธารณะคงที่ addunVisitedUrl (url สตริง) {ถ้า (url! = null &&! url.trim (). เท่ากับ ("") &&! visitedurl.contains (url) && } // ตรวจสอบว่าคิว URL ที่ไม่ได้รับการตรวจสอบเป็นแบบสแตติกแบบสาธารณะที่ว่างเปล่าไม่ได้รับการพิจารณา () {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; / ** * ตัวกรอง URL ของ HTTP เพื่อรับ URL ที่สามารถปฏิบัติตามกฎ * @author Administrator * */ คลาสสาธารณะ Parserhttpurl {// รับลิงก์บนเว็บไซต์ตัวกรองจะใช้ลิงก์ลิงก์สาธารณะ ลอง {parser parser = new parser (URL); // กรองตัวกรองของแท็ก <frame> เพื่อแยกลิงก์ที่แสดงโดยแอตทริบิวต์ SRC ในแท็กเฟรม nodefilter framefilter = new NodeFilter () {บูลีนสาธารณะยอมรับ (โหนดโหนด) {ถ้า (node.getText () startswith ("frame src =") {กลับมาจริง; } else {return false; - // orfilter เพื่อตั้งค่าการกรอง <a> แท็กและ <frame> แท็ก orfilter linkFilter = ใหม่ orfilter (ใหม่ nodeClassFilter (linktag.class), framefilter); // รับแท็กที่ผ่านการกรองทั้งหมดรายการ nodeList = parser.extractallNodestHatMatch (LinkFilter); สำหรับ (int i = 0; i <list.size (); i ++) {node tag = list.elementat (i); if (แท็กอินสแตนซ์ของ linktag) // <a> แท็ก {linktag link = (linktag) แท็ก; String linkurl = link.getLink (); // url ถ้า (filter.accept (linkurl)) links.add (linkurl); } อื่น // <frame> แท็ก {// แยกลิงค์ไปยังแอตทริบิวต์ SRC ในเฟรมเช่น <frame src = "test.html"/> สตริงเฟรม = tag.getText (); int start = frame.indexof ("src ="); frame = 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 * */ คลาสสาธารณะดาวน์โหลด PPIC {// การเข้ารหัสสตริงสุดท้ายคงที่ส่วนตัว ecoding = "UTF-8"; // รับ img tag ปกติสตริงสุดท้ายคงที่ imgurl_reg = "<img.*src = (.*?) [^>]*?>"; // รับสตริงสุดท้ายคงที่ส่วนตัวทั่วไป imgsrc_reg = "http:/"? (.*?) (/"|> | // s+)"; โมฆะคงที่สาธารณะ downloadpic (url สตริง) {// รับเนื้อหาข้อความ HTML สตริง html = null; ลอง {html = downloadpic.gethtml (url); } catch (exception e) {e.printstacktrace (); } if (null! = html &&! "". equals (html)) {// รับรายการแท็กรูปภาพ <String> imgurl = downloadpic.getimageUrl (html); // รับรายการที่อยู่ SRC รูปภาพ <String> imgsrc = downloadpic.getimagesrc (imgurl); // ดาวน์โหลดภาพดาวน์โหลด Loadkpic.download (IMGSRC); }} / *** * รับเนื้อหา html * * @param url * @return * @throws Exception * / สตริงคงที่ส่วนตัว gethtml (url สตริง) โยนข้อยกเว้น {url uri = url ใหม่ (url); การเชื่อมต่อ urlConnection = uri.openconnection (); inputStream ใน = connection.getInputStream (); ไบต์ [] buf = ไบต์ใหม่ [1024]; ความยาว int = 0; StringBuffer sb = new StringBuffer (); ในขณะที่ ((length = in.read (buf, 0, buf.length))> 0) {sb.append (สตริงใหม่ (buf, ecoding)); } in.close (); ส่งคืน sb.toString (); } / *** * รับที่อยู่ ImageUrl * * @param html * @return * / รายการคงที่ส่วนตัว <String> getImageUrl (สตริง html) {matcher matcher = pattern.compile (imgurl_reg) .matcher (html); รายการ <String> listimGurl = new ArrayList <String> (); ในขณะที่ (matcher.find ()) {listimgurl.add (matcher.group ()); } return listimgurl; } / *** * รับที่อยู่ภาพ * * @param ListImageUrl * @return * / รายการคงที่ส่วนตัว <String> getImagesRC (รายการ <String> ListImageUrl) {รายการ <String> listimgsrc = new ArrayList <String> (); สำหรับ (String Image: ListImageUrl) {matcher matcher = pattern.compile (imgsrc_reg) .matcher (รูปภาพ); ในขณะที่ (matcher.find ()) {listimgsrc.add (matcher.group (). substring (0, matcher.group (). length () - 1)); }} return listimgsrc; }/**** ดาวน์โหลดภาพ** @param listimgsrc*/โมฆะคงที่ส่วนตัวดาวน์โหลด (รายการ <string> listimgsrc) {สำหรับ (url string: listimgsrc) {ลอง {string imagename = url.substring (url.lastindexof ("/") + 1 url uri = url ใหม่ (url); inputStream ใน = uri.openstream (); fileOutputStream fo = new fileOutputStream (ไฟล์ใหม่ (imageName)); ไบต์ [] buf = ไบต์ใหม่ [1024]; ความยาว int = 0; ในขณะที่ ((length = in.read (buf, 0, buf.length))! = -1) {fo.write (buf, 0, ความยาว); } in.close (); fo.close (); } catch (exception e) {e.printstacktrace (); -อินเทอร์เฟซตัวกรองจริงกำหนดอินเทอร์เฟซตัวกรอง:
ตัวกรองส่วนต่อประสานสาธารณะ {บูลีนสาธารณะยอมรับ (url สตริง); -ขั้นตอนที่ 4: การดำเนินการตามกฎการกรอง:
ตัวรวบรวมข้อมูลระดับสาธารณะ { /** * กระบวนการรวบรวมข้อมูล * * @return * @param seeds * /โมฆะสาธารณะการรวบรวมข้อมูล (url สตริง) {// กำหนดตัวกรองตัวกรองตัวกรองตัวกรอง = ตัวกรองใหม่ () {บูลีนสาธารณะยอมรับ (url สตริง) {// กฎการกรองที่นี่ ขอแนะนำให้ใช้การใช้งานปกติ ฉันกำลังรวบรวมเว็บไซต์ douban ถ้า (url.indexof ("douban.com/group/topic")! = -1 || url.indexof ("douban.com/group/haixiuzu/discussion?start")! = -1) กลับมาจริง; อื่นกลับมาเป็นเท็จ - // เริ่มต้น url queue linkqueue.addunvisitedurl (url); // เงื่อนไขลูปลิงก์ที่จะรวบรวมข้อมูลไม่ว่างเปล่าในขณะที่ (! linkqueue.unvisitedurlsempty ()) {// URL ส่วนหัวออกจากคิวสตริง Visiturl = (สตริง) linkqueue.unvisitedurldequeue (); if (visiturl == null) ดำเนินการต่อ; ดาวน์โหลด loadkpic.downloadpic (Visiturl); // แยก URL จากชุดหน้าเว็บที่ดาวน์โหลดมา <string> ลิงก์ = parserhttpurl.extraclinks (visiturl, ตัวกรอง); // ใหม่ URL enqueue สำหรับ (ลิงก์สตริง: ลิงก์) {linkqueue.addunvisedurl (ลิงก์); }}} // วิธีการหลักรายการโมฆะสาธารณะคงที่หลัก (สตริง [] args) {ตัวรวบรวมข้อมูลตัวรวบรวมข้อมูล = ใหม่ตัวรวบรวมข้อมูล (); Crawler.crawling ("http://www.douban.com/group/haixiuzu/discussion?start=0"); -สรุป
ข้างต้นเป็นรหัสตัวอย่างสำหรับการใช้งาน Java ของรูปภาพเว็บไซต์รวบรวมข้อมูลที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!