Первым шагом является реализация URL -адресов Linkqueue и фильтра и хранить.
импортировать java.util.arraylist; импортировать java.util.collections; импортировать java.util.hashset; импортировать java.util.list; импортировать java.util.set; открытый класс linkqueue {// доступ к URL -коллекции частный статический набор <string> visitedUrl = collections.synchronizedset (new Hashset <string> ()); // UNCACTED URL Private Static List <string> unvisitedUrl = collections.synchronizedlist (новый ArrayList <string> ()); // Unvisyted URL -адреса выходят из очереди Public Static String UnvisitedUrldequeue () {if (unvisitedUrl.size ()> 0) {string url = unvisitedurl.remove (0); Посещал вернуть URL; } return null; } // Проверьте, когда добавляется новый URL, гарантируя, что он добавляется только один раз после публичного статического void addunvisitedurl (string url) {if (url! = Null &&! Url.trim (). Equals (") &&! VisitedUrl.contains (url) &&! Unvisited.contains (url); } // Определите, является ли невизированная очередь URL -адреса пустым публичным статическим логическим логическим явлением UnvisitedUrlSempty () {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; / ** * Filter URL HTTP для получения URL -адресов, которые могут соответствовать правилам * @Author Administrator * */ Public Class Parserhttpurl {// Получить ссылку на веб -сайте, фильтр используется для фильтрации ссылок Public Static Set <string> extraClinks (String Url, Linkfilter Filter) {set <string> Linksese <string>; try {parser parser = new parser (url); // Фильтровал фильтр тега <Frame> для извлечения ссылки, представленной атрибутом SRC в Framefilter Framefilter = new Nodefilter () {public boolean access (node node) {if (node.getText (). StartSwith ("frame src =")) {return true; } else {return false; }}}}; // orfilter для установки фильтрации <a> тегов и <frame> тегов orfilter linkfilter = new orfilter (new nodeclassfilter (linktag.class), framefilter); // Получить все отфильтрованные теги nodelist list = parser.extractallnodesthatmatch (linkfilter); for (int i = 0; i <list.size (); i ++) {node tag = list.elementat (i); if (Tag EncanceOf LinkTag) // <a> Tag {linktag link = (linktag) TAG; String linkurl = link.getLink (); // url if (filter.accep (linkurl)) links.add (linkurl); } else // <Frame> Tag {// Извлечь ссылку в атрибут src в кадре, например, <frame src = "test.html"/> String frame = Tag.getText (); int start = frame.indexof ("src ="); Frame = frame.substring (start); 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 (); } return Links; }}Шаг 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 Network Pictures * * @Author SwingLife * */ Public Class DownloadPic {// Кодирование частной статической конечной строки eCoding = "utf-8"; // Получить IMG TAG регулярной частной статической конечной строки imgurl_reg = "<img.*Src = (.*?) [^>]*?>"; // Получить обычную частную статическую конечную строку imgsrc_reg = "http:/"? (.*?) (/"|> | // s+)"; public static void downloadpic (string url) {// Получить строку текстового содержимого HTML html = null; try {html = downloadpic.gethtml (url); } catch (Exception e) {e.printstackTrace (); } if (null! = html &&! "". // Получить изображение списка адресов src <string> imgsrc = downloadpic.getimagesrc (imgurl); // Загрузите изображение загрузка roadpic.download (imgsrc); }} / *** * GET HTML Content * * @param url * @return * @throhs excection * / private static String gethtml (string url) Throws Exception {url uri = new URL (url); UrlConnection Connection = uri.openconnection (); InputStream in = connection.getInputStream (); byte [] buf = new Byte [1024]; int length = 0; StringBuffer sb = new StringBuffer (); while ((length = in.read (buf, 0, buf.length))> 0) {sb.append (new String (buf, ecoding)); } in.close (); вернуть sb.toString (); } / *** * Получить адрес ImageUrl * * * @param html * @return * / private static list <string> getimageurl (string html) {matchter matcher = pattern.compile (imgurl_reg) .matcher (html); List <string> listimgurl = new ArrayList <string> (); while (matcher.find ()) {listimgurl.add (matcher.group ()); } return listimgurl; } / *** * GET ImagesRC Addrc * * @param distimageurl * @return * / private Static List <string> getimagesrc (list <string> listimageurl) {list <string> listimgsrc = new ArrayList <string> (); for (String Image: listimageurl) {matchter matcher = pattern.compile (imgsrc_reg) .matcher (image); while (matcher.find ()) {listimgsrc.add (matcher.group (). substring (0, matcher.group (). length () - 1)); }} return listimgsrc; }/**** Скачать изображение** @param listimgsrc*/private static void скачать (list <string> listimgsrc) {for (string url: listimgsrc) {try {string ImageName = url.substring (url.lastIndexof ("/") + 1, url.length ()); Url uri = new URL (URL); InputStream in = uri.openstream (); FileOutputStream fo = new FileOutputStream (новый файл (ImageName)); byte [] buf = new Byte [1024]; int length = 0; while ((length = in.read (buf, 0, buf.length))! = -1) {fo.write (buf, 0, длина); } in.close (); fo.close (); } catch (Exception e) {e.printstackTrace (); }}}}Интерфейс реального фильтра, определить интерфейс фильтра:
Фильтр публичного интерфейса {public boolean accept (string url); }Шаг 4: Реализация правил фильтрации:
Public Class Crawler { /** * Процесс ползания * * @return * @param Seeds * /public void Crawling (String url) {// определить фильтр фильтра «Фильтр» = новый фильтр () {public boolean accept (string url) {// Правила фильтрации здесь изменяются в соответствии с правилами веб -сайтов, которые необходимо разбить. Рекомендуется использовать регулярную реализацию. Я ползую веб -сайт Douban if (url.indexof ("douban.com/group/topic")! = -1 || url.indexof ("douban.com/group/haixiuzu/discussion?start")! = -1) вернуть True; иначе вернуть ложь; }}; // Инициализировать очередь URL Linkqueue.addunvisitedUrl (url); // Условие цикла, ссылка для ползания не пуста, в то время как (! Linkqueue.UnvisitedUrlSempty ()) {// URL заголовка выходит из строки очереди VITUTURL = (String) linkqueue.UnvisitedURDEQUEUE (); if (visiturl == null) продолжить; Downloadloadpic.downloadpic (visiturl); // Извлеките URL из загруженного набора веб -страниц <string> links = parserhttpurl.extraclinks (Visiturl, Filter); // Новый невидимый URL -enqueue для (строка ссылки: ссылки) {linkqueue.addunvisedurl (link); }}} // Основной метод ввод публичной статической void main (string [] args) {Crawler Crawler = new Crawler (); crawler.crawling ("http://www.douban.com/group/haixiuzu/discussion?start=0"); }}Суммировать
Выше приведен пример кода для реализации Java с изображениями ползания веб -сайта, представленных редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!