Der erste Schritt ist die Implementierung von Linkqueue und Filtern und Speichern von URLs.
Import Java.util.ArrayList; Import Java.util.Collections; import Java.util.hashset; importieren java.util.list; Java.util.set importieren; öffentliche Klasse LinkQueue {// Zugriff auf URL -Sammlung private statische Set <String> VisitedUrl = collections.synchronizedSet (neuer Hashset <string> ()); // Unaccess URL private statische Liste <string> unvidedUrl = collections.synchronizedList (New ArrayList <string> ()); // Unbevölkerte URLs sind aus der Warteschlange, die öffentliche statische String nicht besucht ist, nicht besucht, dassUrldequeue () {if (unvisedUrl.size ()> 0) {String url = unvidedUrl.remove (0); VisitedUrl.add (URL); Return URL; } return null; } // Überprüfen Sie, wann eine neue URL hinzugefügt wird, und stellen Sie sicher, dass sie nur dann hinzugefügt wird, sobald öffentliches statisches void addUnvisedUrl (String url) {if (url! } // Bestimmen Sie, ob die nicht besuchte URL -Warteschlange leer ist, öffentlich statische booleanische nicht besucht, unde, {return unvisedUrl.isempty (); }}Der zweite Schritt besteht darin, die Links unter jeder URL und Filter zu sammeln, um neue Links zu generieren.
import Java.util.hashset; Java.util.set importieren; import org.htmlparser.node; import org.htmlparser.nodeFilter; import org.htmlparser.parser; import org.htmlparser.filters.nodeclassfilter; import org.htmlparser.filter.orfilter; import org.htmlparser.tags.linktag; import org.htmlparser.util.nodelist; import org.htmlparser.util.parsexception; / ** * Filter -HTTP -URL, um URLs zu erhalten, die den Regeln entsprechen * @Author Administrator * * */ öffentliche Klasse ParserHttpurl {// einen Link auf einer Website abrufen, wird Filter verwendet, um die öffentlichen statischen statischen Set <string> extraclinks (String -URL, LinkFilter -Filter) {{Set <Set <Seta -Links zu filtern). Versuchen Sie {Parser Parser = New Parser (URL); // Filter des <Ream> -Tags filtern, um den durch das SRC -Attribut dargestellten Link im Frame -Tag NodeFilter FrameFilter = new nodeFilter () {public boolean Accept (Node Node) {if (node.getText () zu extrahieren. } else {return false; }}}}; // Orfilter zum Festlegen von Filterung <a> Tags und <Ream> Tags Orfilter linkFilter = new orfilter (neuer nodeclassfilter (linktag.class), FrameFilter); // Alle gefilterten Tags nodelist liste = parser.extractAllnodesthatMatch (linkFilter); für (int i = 0; i <list.size (); i ++) {node tag = list.elementat (i); if (Taginstanceof linkTag) // <a> Tag {linkTag link = (linktag) tag; String linkurl = link.getLink (); // url if (filter.accept (linkUrl)) links.add (linkUrl); } else // <Ream> Tag {// extrahieren Sie den Link zum SRC -Attribut im Bild, z. int start = Frame.Indexof ("src ="); Frame = Frame.Substring (Start); int End = Frame.Indexof (""); if (end == -1) end = Frame.Indexof (">"); String Frameurl = Frame.Substring (5, Ende - 1); if (filter.accept (Frameurl)) links.add (Frameurl); }} catch (parsexception e) {e.printstacktrace (); } Return Links; }}Schritt 3: Implementieren Sie die Image -Download -Funktion
Import Java.io.file; importieren java.io.fileoutputStream; importieren java.io.inputstream; importieren java.net.url; importieren java.net.urlConnection; Import Java.util.ArrayList; importieren java.util.list; Import Java.util.Regx.Matcher; Import Java.util.Regex.Pattern; / *** * Java Crawl Network Pictures * * @Author SwingLife * * */ public class downloadpic {// Codieren private statische endgültige String ecoding = "utf-8"; // das IMG -Tag reguliert regelmäßig private statische endgültige Zeichenfolge imgurl_reg = "<img.*Src = (.*?) [^>]*?>"; // Erhalten Sie den regulären privaten statischen endgültigen String imgsrc_reg = "http:/"? (.*?) (/"|> | // s+)"; public static void downloadpic (String url) {// den HTML -Textinhaltszeichenfolge html = null erhalten; try {html = downloadpic.gethtml (URL); } catch (Ausnahme e) {e.printstacktrace (); } if (null! // Die Bild -SRC -Adressliste <string> imgsrc = downloadpic.getImagesrc (imgurl) abrufen; // Image DownloadLoadPic.Download (IMGSRC) herunterladen; }} / *** * HTML -Inhalt abrufen * * @param url * @return * @throws Exception * / private statische String Gethtml (String url) löst eine Ausnahme aus {url uri = new url (url); UrlConnection Connection = Uri.OpenConnection (); InputStream in = connection.getInputStream (); byte [] buf = neues byte [1024]; int länge = 0; StringBuffer sb = new StringBuffer (); while ((länge = in.read (buf, 0, buf.length))> 0) {sb.append (neue String (buf, ecoding)); } in.close (); return sb.tostring (); } / *** * ImageRl -Adresse erhalten * * @param html * @return * / private statische Liste <string> getImageUrl (String html) {Matcher Matcher = muster.comPile (imgurl_reg) .Matcher (html); List <String> listimgurl = new ArrayList <string> (); while (matcher.find ()) {listimgurl.add (matcher.group ()); } return listimgurl; } / *** * Bilderrc -Adresse erhalten * * @param listimageurl * @return * / private statische Liste <string> getImagesrc (List <string> listimageurl) {list <string> listimgsrc = new ArrayList <string> (); für (String -Bild: listimageUrl) {Matcher Matcher = muster.comPile (imgsrc_reg) .Matcher (Bild); while (matcher.find ()) {listimgsrc.add (matcher.group (). substring (0, matcher.group (). Länge () - 1)); }} return listimgsrc; }/**** Bild herunterladen** @param listimgsrc*/private static void download (list <string> listimgsrc) {für (String url: listimgsrc) {try {String imaginame = url.substring (url.lastindexof ("/") + 1, url.Legth (); URL URI = neue URL (URL); InputStream in = uri.openstream (); FileOutputStream fo = new FileOutputStream (neue Datei (Bildname)); byte [] buf = neues byte [1024]; int länge = 0; while ((länge = in.read (buf, 0, buf.length))! = -1) {fo.write (buf, 0, Länge); } in.close (); fo.close (); } catch (Ausnahme e) {e.printstacktrace (); }}}}Reale Filterschnittstelle, Definieren Sie die Filterschnittstelle:
public interface filter {public boolean Accept (String -URL); }Schritt 4: Implementierung von Filterregeln:
öffentliche Klasse Crawler { /** * Crawl -Prozess * * @return * @param Seeds * /public void crawling (String url) {// Filter filter filter = new filter () {public boolean akzeptieren (String url) {// Die Filterregeln hier werden gemäß den Regeln der Regeln geändert, die kriecht. Es wird empfohlen, eine regelmäßige Implementierung zu verwenden. Ich krieche die Doppelwebsite, wenn (url.indexof ("doulban.com/group/topic")! sonst return falsch; }}; // URL Queue linkQueue.addunvisedUrl (URL) initialisieren; // Schleifenbedingung, der zu krabbelende Link ist nicht leer (! if (VisitUrl == NULL) Weiter; DownloadPic.DownloadPic (VisitUrl); // die URL aus der heruntergeladenen Webseite set <string> links = parserhttpurl.extraclinks (VisitUrl, Filter) extrahieren; // Neue nicht besuchte URL Enqueue für (String -Link: Links) {linkQueue.addunvisedUrl (Link); }}} // Hauptmethode Eintrag public static void main (String [] args) {crawler crawler = new crawler (); crawler.crawling ("http://www.douban.com/group/haixiuzu/discussion?start=0"); }}Zusammenfassen
Das obige ist der Beispielcode für die Java -Implementierung von Crawling -Website -Bildern, die vom Herausgeber eingeführt wurden. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!