Основываясь на ссылках на целевой веб -сайт, эта статья дополнительно увеличивает сложность, отражает контент, который нам нужен на целевой странице, и сохраняет его в базе данных. В тестовом примере здесь используется веб -сайт загрузки фильма, который я часто использую (http://www.80s.la/). Первоначально я хотел заполнить все ссылки на загрузку фильмов на веб -сайте, но позже я почувствовал, что это заняло слишком много времени, поэтому я изменил их, чтобы запустить ссылки на скачивание для фильма 2015 года.
Введение в первый принцип
На самом деле, принципы аналогичны первой статье. Разница в том, что, поскольку на этом веб -сайте слишком много списков классификации, это невообразимо, если эти теги не выбраны.
Вам не нужно использовать ссылки на категории или теги. Вы не используете эти ссылки для ползания других страниц. Вы можете получить список фильмов других страниц только посредством страниц всех типов фильмов внизу страницы. В то же время, для страницы сведений о фильме, вы только ползуете название фильма и ссылки на скачивание гром и не ползаете в глубине. Вам не нужны никаких рекомендуемых фильмов и других ссылок на странице сведений.
Наконец, сохраните ссылки на загрузку всех полученных фильмов в коллекции VideoLinkMap и сохраните данные в MySQL, пройдя эту коллекцию.
Реализация двух кодов
Принцип реализации был упомянут выше, и в коде есть подробные комментарии, поэтому я не буду говорить об этом здесь, код заключается в следующем:
Действие пакета; импорт java.io.bufferedreader; import java.io.ioexception; импорт java.io.inputstream; import java.io.inputStreamReader; импорт java.net.httpurlConnection; импорт java.net.malformedurlex; import java.url; импорт. java.sql.preparedStatement; import java.sql.sqlexception; импорт java.util.linkedhashmap; import java.util.map; импорт java.util.regex.matcher; import java.util.regex.pattern; открытый класс Videolinkgrab {public static void main (string [] args) {videoLinkgrab videoLinkgrab = new VideoLinkGrab (); videolinkgrab.savedata ("http://www.80s.la/movie/list/-2015--p"); } / ** * Сохранить полученные данные в базе данных * * @param baseurl * начальная точка CRAWLER * @return null * * / public void Saidata (String baseurl) {map <string, boolean> oldmap = new LinkedHashmap <String, boolean> (); // хранить ссылку-IS он проходит по карту <string, string> videoLinkMap = new LinkedHashMap <string, string> (); // Скачать видео Ссылка string oldlinkhost = ""; // шаблон хоста p = pattern.compile ("(https?: //)? [^/// s]*"); // Например: http://www.zifangsky.cn matchter m = p.matcher (baseurl); if (m.find ()) {oldlinkhost = m.group (); } oldmap.put (baseurl, false); VideoLinkMap = crawllinks (Oldlinkhost, Oldmap); // Траверсировать и сохранить данные в базе данных try {connection connection = jdbcdemo.getConnection (); для (map.entry <String, String> Mapping: VideOlinkMap.EntrySet ()) {подготовленная установка pStatement = connection .prepareStatement («Вставка в Movie (Moviename, Movielink) значения (?,?)»); pstatement.setstring (1, mapping.getkey ()); pstatement.setString (2, mapping.getValue ()); pstatement.executeupdate (); pstatement.close (); // System.out.println (mapping.getKey () + ":" + mapping.getValue ()); } connection.close (); } catch (sqlexception e) {e.printstacktrace (); }} /*** Crawl все ссылки на веб -страниц, которые можно заполнить на веб -сайте. В этой идее алгоритм приоритета широты используется для постоянного инициирования запросов GET для новых ссылок, которые не были пересечены. До тех пор, пока полный набор не будет пройден, никаких новых ссылок не может быть найдено*, что означает, что новые ссылки не могут быть найдены. Задача заканчивается * * При выполнении запроса на ссылку используйте обычные поиски для видео ссылки, которая нам нужна для веб -страницы, а затем сохранить ее в коллекции VideoLinkMap * * @param oldlinkhost * доменное имя, например: http://www.zifangsky.cn * @param oldmap * strink strinks strick * @return return return wall crawled video video video video return video video video return video video video grawled video * @return. Crawllinks (String OldLinkhost, Map <String, Boolean> OldMap) {map <String, boolean> newmap = new LinkedHashmap <String, boolean> (); // новая ссылка, полученная с каждой карты цикла <строка, String> VideOlinkMap = new LinkedHashMap <String, String> (); // Скачать видео Ссылка string oldlink = ""; for (map.Entry <String, boolean> mapping: oldmap.EntrySet ()) {// system.out.println ("Ссылка:" + mapping.getKey () + "-------- Проверка:" // + mapping.getValue ()); // Если это не было прошел через (! Mapping.getValue ()) {oldlink = maping.getKey (); // инициировать запрос получить запрос try {url url = new URL (OldLink); Httpurlconnection connection = (httpurlconnection) url .openconcenection (); connection.setrequestmethod ("Get"); Connection.setConnecttimeout (2500); Connection.SetReadTimeOut (2500); if (connection.getResponsecode () == 200) {inputStream inputStream = connection.getInputStream (); BufferedReader Reader = New BufferedReader (New InputStreamReader (inputStream, "UTF-8")); String line = ""; Шаблон = null; Matcher Matcher = null; // Страница сведений о фильме, выберите в нем ссылку для загрузки видео и не продолжайте ползать по другим страницам, если (ismoviepage (oldlink)) {boolean checktitle = false; Строка title = ""; while ((line = reader.readline ())! = null) {// Получить заголовок видео на странице if (! CheckTitle) {pattern = pattern.compile ("([^// s]+).*? </title>"); matcher = pattern.matcher (line); if (matcher.find ()) {title = matcher.group (1); CheckTitle = true; продолжать; }} // Удалить ссылку загрузки видео в шаблоне страницы = шаблон .compile ("(Thunder: [^/"]+).*Thunder [rr] es [tt] itle =/"[^/"]*/""); matcher = pattern.matcher (line); if (matcher.find ()) {videolinkmap.put (title, matcher.group (1)); System.out.println ("Видео имя:" + title + "------ Видео ссылка:" + matcher.group (1)); перерыв; // Текущая страница была обнаружена}}} // страница списка фильмов else if (checkurl (oldlink)) {while ((line = reader.readline ())! = Null) {pattern = pattern .compile ("<a href =/" ([^/"// s]*)/" "); matcher.group (1) .trim (); (newlink.endswith ("/")) newlink = newlink.substring (0, newlink.length () - 1); System.out.println ("temp:" + newlink); } try {thread.sleep (1000); } catch (прерванное искусство e) {e.printstacktrace (); } oldMap.Replace (OldLink, false, true); }} // Есть новая ссылка, продолжайте пройти через if (! Newmap.isempty ()) {oldmap.putall (newmap); VideoLinkMap.Putall (Crawllinks (OldLinkhost, OldMap)); // Из-за характеристик карты дублирующие пары клавиш не будут происходить} return VideoLinkMap; }/** * Судите, является ли это страницей списка фильмов 2015 года * @param URL URL, который будет проверен * @return Status * */public boolean checkurl (string url) {pattern = pattern.compile ("http://www.80s.la/movie/-2015-----p//d*"); Matcher Matcher = pattern.matcher (url); if (matcher.find ()) вернуть true; // Список 2015 года еще вернуть false; }/** * Судите, является ли страница страницы сведений о фильме * @param url Ссылка * @return Status * */public boolean ismoviepage (string url) {pattern = pattern.compile ("http://www.80s.la/movie///d+"); Matcher Matcher = pattern.matcher (url); if (matcher.find ()) вернуть true; // страница фильма иначе вернуть ложь; }} ПРИМЕЧАНИЕ. Если вы хотите ползти определенного контента с других веб -сайтов, вам необходимо разумно изменить некоторые регулярные выражения в соответствии с реальной ситуацией.
Три результата испытаний
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.