Según los enlaces al sitio web de destino, este artículo aumenta aún más la dificultad, captura el contenido que necesitamos en la página de destino y lo guarda en la base de datos. El caso de prueba aquí utiliza un sitio web de descarga de películas que a menudo uso (http://www.80s.la/). Originalmente quería rastrear todos los enlaces de descarga de la película en el sitio web, pero luego sentí que me tomó demasiado tiempo, así que lo cambié para rastrear los enlaces de descarga para la película 2015.
Introducción al primer principio
De hecho, los principios son similares al primer artículo. La diferencia es que, dado que hay demasiadas listas de clasificación en este sitio web, es inimaginable si estas etiquetas no se eligen.
No necesita usar enlaces de categoría o enlaces de etiqueta. No usa estos enlaces para rastrear otras páginas. Solo puede obtener la lista de películas de otras páginas a través de la paginación de todo tipo de películas en la parte inferior de la página. Al mismo tiempo, para la página Detalles de la película, solo rastrea el título de la película y los enlaces de descarga de Thunder, y no gastas en profundidad. No necesita ninguna película recomendada y otros enlaces en la página de detalles.
Finalmente, guarde los enlaces de descarga de todas las películas obtenidas en la colección VideoLinkMap y guarde los datos en MySQL atravesando esta colección.
Implementación de dos códigos
El principio de implementación se ha mencionado anteriormente, y hay comentarios detallados en el código, por lo que no hablaré de eso aquí, el código es el siguiente:
acción del paquete; import java.io.bufferedReader; import java.io.ioexception; import java.io.inputstream; import java.io.inputstreamreader; import java.net.httpurlConnection; import java.net.malformedurlexception; import java.net.net.url; import java.sql.connection; java.sql.preparedStatement; import java.sql.sqlexception; import java.util.linkedhashmap; import java.util.map; import java.util.regex.matcher; import java.util.regex.pattern; Public Class VideolinkGrab {public static void main (string [] args) {VideOlinkGrab videolinkGrab = new VideolinkGrab (); VideolinkGrab.savedata ("http://www.80s.la/movie/list/-2015----P"); } / ** * Guardar los datos recuperados en la base de datos * * @param BaseUrl * Crawler Punto de partida * @return null * * / public void saveData (string baseurl) {map <string, boolean> oldmap = new Linkedhashmap <String, boolean> (); // Almacene Link-IS IS Traversado por MAP <String, String> VideolinkMap = new LinkedHashMap <String, String> (); // Video Descargar enlace cadena OldLinkHost = ""; // Patrón de host P = Pattern.compile ("(https?: //)? [^/// s]*"); // Por ejemplo: http://www.zifangsky.cn matcher m = p.matcher (baseurl); if (m.find ()) {OldLinkHost = M.Group (); } Oldmap.put (baseUrl, falso); VideoLinkMap = Crawllinks (OldLinkhost, Oldmap); // Traverse y guarde los datos en la base de datos Try {Connection Connection = jdbcdemo.getConnection (); for (map.entry <string, string> mapping: videolinkmap.entryset ()) {prepareStatement pStatement = Connection .PrepareStatement ("Inserte en valores de película (Moviename, Movielink) (?,?)"); pstatement.setString (1, mapping.getKey ()); pstatement.setString (2, mapping.getValue ()); pStatement.exCuteUpdate (); pstatement.close (); // system.out.println (mapping.getkey () + ":" + mapping.getValue ()); } conexión.close (); } Catch (Sqlexception e) {E.PrintStackTrace (); }} /*** Ratea todos los enlaces de la página web que se pueden rastrear en un sitio web. En la idea, el algoritmo prioritario de amplitud se usa para iniciar continuamente las solicitudes de los nuevos enlaces que no han sido atravesados. Hasta que el conjunto completo esté atravesado, no se pueden encontrar nuevos enlaces*, lo que significa que no se pueden encontrar nuevos enlaces. La tarea termina * * Al hacer una solicitud de un enlace, use búsquedas regulares para el enlace de video que necesitamos para la página web y luego guárdela en la colección VideoLinkMap * * @param OldLinkhost * Nombre de dominio, como: http://www.zifangsky.cn * @param OldMap * Collection de enlace * Valor de enlace String < * * * @ @@retreturn regreso Video Download Video Download Video Download Video Download. Crawllinks (String Oldlinkhost, Map <String, Boolean> Oldmap) {Map <String, Boolean> Newmap = new LinkedHashmap <String, Boolean> (); // Nuevo enlace obtenido de cada mapa de bucle <String, String> VideolinkMap = new LinkedHashMap <String, String> (); // Video Descargar enlace cadena Oldlink = ""; for (map.entry <string, boolean> mapping: oldmap.entryset ()) {// system.out.println ("link:" + mapping.getKey () + "--------- verificar:" // + mapping.getValue ()); // Si no ha sido atravesado por (! Mapping.getValue ()) {oldLink = mapping.getKey (); // iniciar una solicitud GET prueba {url url = nueva url (OldLink); Httpurlconnection Connection = (httpurlconnection) url .openconnection (); Connect.SetRequestMethod ("Get"); Connection.SetConnectTimeOut (2500); Connection.SetReadTimeOut (2500); if (conexión.getResponseCode () == 200) {inputStream inputStream = Connection.getInputStream (); BufferedReader Reader = new BufferedReader (new InputStreamReader (inputStream, "UTF-8")); Línea de cadena = ""; Patrón patrón = nulo; Matcher Matcher = nulo; // página de detalles de la película, elimine el enlace de descarga de video en él y no continúe rastreando otras páginas en profundidad if (isMoviePage (OldLink)) {boolean checkTitle = false; Title de cadena = ""; while ((line = Reader.readline ())! = NULL) {// Recupere el título de video en la página if (! checkTitle) {patrón = patrón.compile ("([^// s]+).*? </title>"); matcher = patrón.matcher (línea); if (matcher.find ()) {title = matcher.group (1); checktitle = true; continuar; }} // Eliminar el enlace de descarga de video en el patrón de página = patrón .compile ("(Thunder: [^/"]+).*Thunder [rr] es [tt] itle =/"[^/"]*/""); matcher = patrón.matcher (línea); if (matcher.find ()) {videolinkmap.put (title, matcher.group (1)); System.out.println ("Nombre del video:" + Título + "------ Enlace de video:" + matcher.group (1)); romper; // La página actual se ha detectado}}} // la página de la lista de películas más if (checkurl (Oldlink)) {while ((line = lector.readline ())! = Null) {patrón = patrones .Compile ("<a href =/" ([^/"// S]*)/" "); Matcher = Pattern); Matcher.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, falso, verdadero); }} // Hay un nuevo enlace, continúa atravesando if (! Newmap.isEmpty ()) {Oldmap.putall (newMap); VideolinkMap.putall (Crawllinks (Oldlinkhost, Oldmap)); // Debido a las características del mapa, no se producirán pares de valor clave duplicados} return VideolinkMap; }/** * Juzgue si es una página de la lista de películas 2015 * @param URL URL para ser verificada * @return status * */public boolean checkurl (url de cadena) {patrón patrón = patrón.compile ("http://www.80s.la/movie/list/-2015----p//d*"); Matcher Matcher = Pattern.Matcher (URL); if (matcher.find ()) return true; // Lista 2015 más devuelve falso; }/** * Juzgue si la página es una página de detalles de la película * @param URL Page Enlace * @return status * */public boolean isMoviePage (String url) {Pattern Pattern = Pattern.compile ("http://www.80s.la/movie///d+"); Matcher Matcher = Pattern.Matcher (URL); if (matcher.find ()) return true; // Página de la película más devuelve falso; }} Nota: Si desea rastrear algún contenido especificado de otros sitios web, debe modificar algunas de las expresiones regulares razonablemente de acuerdo con la situación real.
Tres resultados de las pruebas
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.