A primeira etapa é implementar o LinkQueue e o filtro e armazenar URLs.
importar java.util.arraylist; importar java.util.Collections; importar java.util.hashset; importar java.util.list; importar java.util.set; classe pública LinkQueue {// COLEÇÃO DE URL ACESSADO CONSULTADO ESTÁTICO PRIVADO <STRING> visitedUrl = Coleções.synchronizedSet (new HashSet <String> ()); // Lista estática privada de URL não acesa <String> unvisitedURL = coleta.synchronizedList (new ArrayList <String> ()); // URLs não visitados estão fora da fila public static string unvisitedurldequeue () {if (unvisitedurl.size ()> 0) {string url = unvisitedurl.remove (0); visitedurl.add (URL); Retornar URL; } retornar nulo; } // Verifique quando um novo URL é adicionado, garantindo que ele seja adicionado apenas uma vez que public estático void addunvisitedUrl (String url) {if (url! = Null &&! Url.trim (). Equals (") &&! Visitedurl.contains (url) &&! UnvisitUrl.Contains (Url.Contains) &&! } // Determine se a fila de URL não visitada está vazia estática estática booleana unvisitedurlsEmpty () {return Unvisitedurl.isEmpty (); }}A segunda etapa é coletar os links em cada URL e filtrar para gerar novos links.
importar java.util.hashset; importar java.util.set; importar org.htmlparser.node; importar org.htmlparser.nodeFilter; importar org.htmlparser.parser; importar org.htmlparser.filters.nodeclassFilter; importar org.htmlparser.filters.orFilter; importar org.htmlparser.tags.linktag; importar org.htmlparser.util.nodelist; importar org.htmlparser.util.parserexception; / ** * Filtre o URL do HTTP para obter URLs que podem cumprir as regras * @Author Administrator * */ public class ParserHttpurl {// Obtenha um link em um site, o filtro é usado para filtrar links public static <strat <Straclinks has has has (string url, linkFilter) (set); tente {parser parser = novo analisador (url); // filtre o filtro da tag <cresch> para extrair o link representado pelo atributo src no quadro de nodefilter de tag -tag FrameFilter = new NodeFilter () {public boolean Acep (nó nó) {if (node.getText (). } else {return false; }}}}; // orfilter para definir tags de filtragem <a> e tags <crame> orfilter linkFilter = new orfilter (new NodeClassFilter (linkTag.class), FrameFilter); // Obtenha todas as tags filtradas nodelist list = parser.extractallnodesthatmatch (linkFilter); for (int i = 0; i <list.size (); i ++) {tag node = list.Elementat (i); if (tag instanceof linkTag) // <a> tag {linkTag link = (linkTag) tag; String linkurl = link.getLink (); // url if (filter.accept (linkurl)) links.add (linkurl); } else // <drame> tag {// extraia o link para o atributo src no quadro, como <ardem 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 (); } retornar links; }}Etapa 3: Implemente a função de download da imagem
importar java.io.file; importar java.io.fileOutputStream; importar java.io.inputStream; importar java.net.url; importar java.net.urlConnection; importar java.util.arraylist; importar java.util.list; importar java.util.regex.matcher; importar java.util.regex.pattern; / *** * Java Crawl Network Pictures * * @author swinglife * */ public class Downloadpic {// codificando a string final estática privada Ecoding = "utf-8"; // Obtenha a etiqueta IMG TAG REGÁRIA PRIVADA STATIC FINAL IMGURL_REG = "<img.*Src = (.*?) [^>]*?>"; // Obtenha a sequência final estática privada regular imgsrc_reg = "http:/"? (.*?) (/"|> | // s+)"; public static void Downloadpic (string url) {// obtenha o texto html text conteúdo string html = null; tente {html = downloadpic.gethtml (url); } catch (Exceção e) {e.printStackTrace (); } if (null! = html &&! "". Equals (html)) {// Obtenha a lista de tags de imagem <String> imgurl = downloadpic.getImageurl (html); // Obtenha a imagem de endereço SRC da imagem <String> imgsrc = Downloadpic.getImagesrc (imgurl); // download da imagem DownloadLoadpic.Download (IMGSRC); }} / *** * Obtenha conteúdo html * * @param url * @return * @throws exceção * / private static string gethtml (string url) lança exceção {url uri = novo url (url); Conexão com urlConnection = URI.OPENCONNEÇÃO (); InputStream in = Connection.getInputStream (); byte [] buf = novo byte [1024]; int length = 0; StringBuffer sb = new StringBuffer (); while ((comprimento = in.read (buf, 0, buf.length))> 0) {sb.append (new string (buf, ecoding)); } in.close (); return sb.toString (); } / *** * Get ImageUrl Endereço * * @param html * @return * / Lista estática privada <String> getImageUrl (String html) {Matche Matcher = Pattern.compile (imgurl_reg) .matcher (html); List <String> listimgurl = new ArrayList <String> (); while (matcher.find ()) {listimgurl.add (matcher.group ()); } retornar listimgurl; } / *** * Get Imagesrc Endereço * * @param listimageurl * @return * / Lista estática privada <String> getImagesrc (list <string> listImageurl) {list <string> listimgsrc = new ArrayList <string> (); para (imagem da string: listImageUrl) {Matcher Matcher = Pattern.compile (imgsrc_reg) .matcher (imagem); while (matcher.find ()) {listimgsrc.add (matcher.group (). substring (0, matcher.group (). length () - 1)); }} retornar listimgsrc; }/**** Download da imagem** @param listimgsrc*/private estático void download (list <string> listimgsrc) {for (string url: listimgsrc) {try {string imageName = url.substring (url.lastIndexof ("/") + 1, url.lngthngth (); URL URI = novo URL (URL); InputStream em = uri.openstream (); FileOutputStream FO = new FileOutputStream (novo File (imageName)); byte [] buf = novo byte [1024]; int length = 0; while ((comprimento = in.read (buf, 0, buf.length))! = -1) {fo.write (buf, 0, comprimento); } in.close (); fo.close (); } catch (Exceção e) {e.printStackTrace (); }}}}Interface de filtro real, defina interface do filtro:
filtro de interface pública {public boolean aceit (string url); }Etapa 4: Implementação de regras de filtragem:
classe pública CRAWLER { /** * Processo de rastreamento * * @return * @param Seeds * /public void rastreando (string url) {// define filtro filtro filtro = new filter () {public boolean aceite (string url) {// as regras de filtragem aqui são alteradas de acordo com as regras dos sites que precisam ser rastreados. Recomenda -se usar implementação regular. Estou rastreando o site douban se (url.indexOF ("douban.com/group/topic")! = -1 || url.indexOf ("duban.com/group/haixiuzu/discussion?start")! = -1) retornar verdadeiro; mais retornar falso; }}; // Inicialize a fila de URL LinkQueue.addunvisitedurl (URL); // Condição de loop, o link a ser rastreado não está vazio enquanto (! LinkQueue.unvisitedurlsEmpty ()) {// O URL do cabeçalho sai da fila String visitUrl = (String) linkQueue.unvisitedurldequeue (); if (visiturl == null) continuar; DownloadLoadpic.Downloadpic (Visiturl); // extraia o URL do conjunto de páginas da web baixado <String> links = parserHttpurl.extraclinks (visiturl, filtro); // novo URL não visitado enQueUe para (link de string: links) {linkQueue.addunVisedurl (link); }}} // Entrada principal do método public estático void main (string [] args) {crawler crawler = new crawler (); crawler.crawling ("http://www.douban.com/group/haixiuzu/discussion?start=0"); }}Resumir
O exposto acima é o código de exemplo para a implementação de Java das imagens de sites de rastejamento introduzidas pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!