Basierend auf den Links zur Zielwebsite erhöht dieser Artikel die Schwierigkeit weiter, erfasst den Inhalt, den wir auf der Zielseite benötigen, und speichert ihn in der Datenbank. Der Testfall hier verwendet eine Filmdownload -Website, die ich häufig verwende (http://www.80s.la/). Ich wollte ursprünglich alle Film -Download -Links auf der Website kriechen, aber später hatte ich das Gefühl, dass es zu lange gedauert hat, also habe ich sie geändert, um die Download -Links für den Film 2015 zu kriechen.
Einführung in das erste Prinzip
Tatsächlich ähneln die Prinzipien dem ersten Artikel. Der Unterschied besteht darin, dass es auf dieser Website zu viele Klassifizierungslisten gibt, es ist unvorstellbar, wenn diese Tags nicht ausgewählt werden.
Sie müssen keine Kategorie -Links oder Tag -Links verwenden. Sie verwenden diese Links nicht, um andere Seiten zu kriechen. Sie können nur die Filmliste anderer Seiten durch die Paginierung aller Arten von Filmen am Ende der Seite erhalten. Gleichzeitig kriechen Sie für die Film -Detail -Seite nur den Filmtitel und den Thunder -Download -Links und kriechen nicht ausführlich. Sie benötigen keine empfohlenen Filme und andere Links auf der Detail -Seite.
Speichern Sie schließlich die Download -Links aller erhaltenen Filme in der Videolinkmap -Sammlung und speichern Sie die Daten in MySQL, indem Sie diese Sammlung durchqueren.
Zwei-Code-Implementierung
Das Implementierungsprinzip wurde oben erwähnt, und es gibt detaillierte Kommentare im Code. Ich werde hier nicht darüber sprechen, der Code lautet wie folgt:
Paketaktion; importieren java.io.buffenedReader; import Java.io.ioxception; Import Java.io.inputStream; Import Java.io.inputStreamReader; Import Java.net.httpurlconnection; java.sql.preeParedStatement; import Java.sql.sqlexception; Import Java.util.linkedHasMap; Import Java.util.map; Import Java.util.regex.Matcher; public class videolinkgrab {public static void main (string [] args) {videolinkgrab videolinkgrab = new videolinkgrab (); videolinkgrab.savedata ("http://www.80s.la/movie/List/-2015----P"); } / ** * Speichern Sie die abgerufenen Daten in der Datenbank * * @param BaseUrl * Crawler -Startpunkt * @return null * * / public void sparedata (string baseUrl) {map <string, boolean> oldmap = new LinkedHasMap <string, boolean> (); // Link-is IT durch MAP <String, String> videolinkmap = new linkedHashMap <String, String> () durchquert; // Video -Download -Link -String -String alteLinkhost = ""; // Hostmuster p = muster.comPile ("(https?: //)? [^/// s]*"); // zum Beispiel: http://www.zifangsky.cn Matcher m = p.matcher (BaseUrl); if (m.find ()) {OldLinkHost = M.Group (); } oldmap.put (BaseUrl, false); videolinkmap = crawllinks (OldLinkHost, OldMap); // Traverse und speichern Sie die Daten in der Datenbank -Try {Connection Connection = jdbcDemo.getConnection (); für (map.entry <String, String> Mapping: videolinkmap.entryset ()) {prepedStatement pStatement = connection .Parestatement ("In Film einfügen (moviename, movielink) Werte (?,?)"); pstatement.setString (1, maping.getKey ()); pstatement.setString (2, maping.getValue ()); pstatement.executeUpdate (); pStatement.close (); // system.out.println (maping.getkey () + ":" + maping.getValue ()); } connection.close (); } catch (sqlexception e) {e.printstacktrace (); }} /*** Kriechen Sie alle Webseiten -Links, die auf einer Website gekrabbt werden können. In der Idee wird der Algorithmus der Breite Priorität verwendet, um GET -Anfragen nach neuen Links zu initiieren, die nicht durchquert wurden. Bis das vollständige Satz durchquert ist, können keine neuen Links gefunden werden*, was bedeutet, dass neue Links nicht gefunden werden können. Die Aufgabe endet * * Bei einer Anfrage für einen Link verwenden Sie regelmäßige Suche nach dem Videolink, den wir für die Webseite benötigen, und speichern Sie sie dann in der Sammlung VideolinkMap * * @param alteLinkhost * Domain -Name, wie: http://www.zifangsky.cn * @param oldmap * link collection * @return return All Crawlled Vica -MADS -SKRINGS COGRALSURDED SUGSURDED * @RETURNED. crawllinks (String alteLinkhost, map <string, boolean> oldmap) {map <string, boolean> newmap = new LinkedHashMap <String, boolean> (); // Neue Link, die aus jeder Schleifenkarte <string, string> videolinkmap = new LinkedHashMap <String, String> () erhalten; // Video -Download -Link -String -String OldLink = ""; für (map.entry <string, boolean> mapping: oldmap.entryset ()) {// system.out.println ("link:" + maping.getkey () + "------ // Wenn es nicht durch (! Maping.getValue ()) {OldLink = maping.getKey () durchquert wurde; // Ein Get Request -Versuch initiieren {url url = new URL (OldLink); HttpurlConnection Connection = (httpurlConnection) url .OpenConnection (); Connection.SetRequestMethod ("get"); Connection.SetConnectTimeout (2500); Connection.SetReadTimeout (2500); if (Connection.getResponSCode () == 200) {inputStream inputStream = connection.getInputStream (); BufferedReader Reader = New BufferedReader (neuer InputStreamReader (InputStream, "UTF-8")); String line = ""; Mustermuster = null; Matcher Matcher = null; // Filmdetails Seite, den Video -Download -Link in IT herausnehmen und andere Seiten nicht weiter kriechen, wenn (ismoviepage (OldLink)) {boolean Chekititle = false; String title = ""; while ((line = reader.readline ())! Matcher = muster.Matcher (Zeile); if (matcher.find ()) {title = matcher.group (1); überprüft = true; weitermachen; }} // den Video -Download -Link im Seiten muster = muster. Compile ("(Thunder: [^/"]+). Matcher = muster.Matcher (Zeile); if (matcher.find ()) {videolinkmap.put (Titel, Match.group (1)); System.out.println ("Video-Name:" + title + "------ Video-Link:" + Matcher.group (1)); brechen; // Die aktuelle Seite wurde nachgewiesen}}} // Die Filmlistenseite else if (checkUrl (OldLink)) {while ((line = reader.readline ()! Match.group (1) .Trim (); (newlink.endswith ("/")) newlink = newlink.substring (0, newlink.length () - 1); System.out.println ("temp:" + newlink); } try {thread.sleep (1000); } catch (interruptedException e) {e.printstacktrace (); } oldmap.replace (OldLink, falsch, wahr); }} // Es gibt einen neuen Link, weiterhin mit der IF (! Newmap.isempty ()) {OldMap.putall (NewMap); videolinkmap.putall (crawllinks (OldLinkhost, OldMap)); // Aufgrund der Merkmale der Karte treten doppelte Schlüsselwertpaare nicht auf. }/** * Beurteilen Sie, ob es sich um eine 2015 Filmliste handelt * @param URL URL überprüft werden soll Matcher Matcher = muster.Matcher (URL); if (matcher.find ()) return true; // 2015 LISTE ENTHALTE RETCAL FALSE; }/** * Beurteilen Sie, ob die Seite eine Seite mit Filmdetails ist * @param url Seite Link * @Return Status * */public boolean ismoviepage (String url) {mustermuster = muster.comPile ("http://www.80s.la/movie//d+"); Matcher Matcher = muster.Matcher (URL); if (matcher.find ()) return true; // Filmseite sonst return false; }} Hinweis: Wenn Sie einige bestimmte Inhalte von anderen Websites kriechen möchten, müssen Sie einige der regulären Ausdrücke entsprechend der tatsächlichen Situation vernünftig ändern.
Drei Testergebnisse
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.