Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 29455|Resposta: 11

[Código-fonte Java] Versão Java do rastreador web

[Copiar link]
Publicado em 30/11/2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
importar java.io.BufferedReader;
importar java.io.InputStreamReader;
importar java.net.URL;
importar java.util.ArrayList;
importar java.util.HashMap;
importar java.util.HashSet;
importar java.util.LinkedHashSet;
import java.util.regex.Matcher;
importar java.util.regex.Pattern;

Procure por rastreadores web
classe pública SearchCrawler implementa Runnable {

/*
  * o robô cache disallowListCache não permite URLs pesquisadas. O protocolo Robot define um arquivo robots.txt na diretório raiz do site,
  * Especifica quais páginas do site são pesquisáveis para busca restrita.
  * O programa de busca deve pular essas áreas durante a busca, aqui está um exemplo de robots.txt:
  * # robots.txt para http://somehost.com/ User-agent:
  * Proibir: /cgi-bin/
  * Proibir: /registro # Proibir robôs na página de registro
  * Disallow: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, ArrayList<String>>();
<String> ArrayList erroLista = novo ArrayList<String>(); Mensagem de erro
<String> Resultado de ArrayList = novo <String>ArrayList(); Resultados pesquisados
String startUrl; Um ponto de partida para iniciar sua busca
int maxUrl; O número máximo de URLs processadas
String searchString; Strings para buscar
booleano Sensível ao caso = falso; Se deve ou não ser sensível a maiúsculas minúsculas
boolean limitHost = false; Se deve pesquisar dentro de um hospedeiro restrito

Public SearchCrawler(String startUrl, int maxUrl, String searchString) {
  this.startUrl = startUrl;
  this.maxUrl = maxUrl;
  this.searchString = searchString;
}

public ArrayList<String> getResult() {
  resultado do retorno;
}

public void run() { // Iniciar o tópico de busca
  crawl(startUrl, maxUrl, searchString, limitHost, majúsculaSensitiva);
}

Detectar formatação de URL
private URL verifyUrl(String url) {
  Apenas URLs HTTP são processadas.
  if (!url.url.toLowerCase().startsWith("http://"))
   return null;
  URL verificadaUrl = null;
  try {
   verifiedUrl = nova URL(url);
  } captura (Exceção e) {
   return null;
  }
  return verifiedUrl;
}

Detecta se o robô permite acesso à URL fornecida.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Pegue o host que dá o RUL
  System.out.println("host="+host);

  Obtenha um cache de URLs que seu host não permite pesquisar
  ArrayList<String> disallowList = disallowListCache.get(host);

  Se você ainda não tem cache, baixe e coloque em cache.
  if (disallowList == null) {
   disallowList = nova ArrayList<String>();
   try {
    URL robotsFileUrl = nova URL("http://" + host + "/robots.txt");
    Leitor BufferedReader = novo BufferedReader(
      novo InputStreamReader(robotsFileUrl.openStream()));

    Leia o arquivo robô para criar uma lista de caminhos que não podem ser acessados.
    Linha de cordas;
    enquanto ((linha = leitor.readLine()) != nulo) {
     if (line.indexOf("Disallow:") == 0) {// Contém "Disallow:"
      String disallowPath = linha.substring("Disallow:"
        .length()); Obtenha o caminho para acesso proibido

      Verifique as anotações.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         comentáriosÍndice); Remova o comentário
      }

      disallowPath = disallowPath.trim();
      disallowList.add(disallowPath);
     }
    }

    Caminhos de cache que esse host não tem permissão para acessar.
    disallowListCache.put (host, disallowList);
   } captura (Exceção e) {
    retorno verdadeiro; Não há arquivos robots.txt no diretório raiz do site, e ele retorna true
   }
  }

  String file = urlToCheck.getFile();
  System.out.println("File getFile()="+file);
  para (int i = 0; i < disallist.size(); i++) {
   String disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    retorne falso;
   }
  }

  retorno verdadeiro;
}

private String downloadPage(URL pageUrl) {
  try {
   Abrir a conexão para a URL para leitura.
   Leitor BufferedReader = novo BufferedReader(novo InputStreamReader(
     pageUrl.openStream()));

   Leia a página para o buffer.
   Linha de cordas;
   StringBuffer pageBuffer = novo StringBuffer();
   enquanto ((linha = leitor.readLine()) != nulo) {
    pageBuffer.append(linha);
   }

   return pageBuffer.toString();
  } captura (Exceção e) {
  }

  return null;
}

Remova "www" da URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  if (índice != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (url);
}

Analise a página e encontre o link
private ArrayList<String> retrieveLinks(URL páginaUrl, String páginaConteúdo,
   HashSet crawledList, boolean limitHost) {
  Compile o padrão correspondente do link com expressões regulares.
  Padrão p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  <String> ArrayList linkList = novo <String>ArrayList();
  enquanto (m.find()) {
   Link da cadeia = m.group(1).trim();

   se (link.length() < 1) {
    continue;
   }

   Pule o link para esta página.
   if (link.charAt(0) == '#') {
    continue;
   }

   if (link.indexOf("mailto:") != -1) {
    continue;
   }

   if (link.toLowerCase().indexOf("javascript") != -1) {
    continue;
   }

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// lida com absolutamente
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + link;
    } else {
     Arquivo string = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// lida com endereços relativos
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + link;
     } else {
      Caminho da cadeia = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + caminho + link;
     }
    }
   }

   int index = link.indexOf('#');
   if (índice != -1) {
    link = link.substring(0, índice);
   }

   link = removeWwwFromUrl(link);

   URL verificadaLink = verifyUrl(link);
   if (verifiedLink == null) {
    continue;
   }

   /* Se você restringir hosts, exclua aquelas URLs que não atendem aos critérios */
   if (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    continue;
   }

   Pule aqueles links que já foram processados.
   if (crawledList.contains(link)) {
    continue;
   }

   linkList.add(link);
  }

  return (linkList);
}

Pesquise o conteúdo de uma página web baixada para determinar se há uma string de busca especificada na página

busca booleana privadaStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  String searchConteúdo = páginaConteúdo;
  if (!caseSensitive) {// if insensitive minúsculas e minúsculas
   pesquisaConteúdo = páginaConteúdos.paraLowerPoint();
  }

  Padrão p = Pattern.compile("[\\s]+");
  Termos String[] = p.split(searchString);
  para (int i = 0; Eu < termos. Comprimento; i++) {
   if (SensitivoMajúscula) {
    if (searchContents.indexOf(termos) == -1) {
     retorne falso;
    }
   } else {
    if (searchContents.indexOf(termos.toLowerPoint()) == -1) {
     retorne falso;
    }
   }
  }

  retorno verdadeiro;
}

Realize a operação de busca propriamente dita
crawl public<String> ArrayList (String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  HashSet<String> crawledList = novo <String>HashSet();
  LinkedHashSet<String> paraCrawlList = novo <String>LinkedHashSet();

  if (maxUrls < 1) {
   errorList.add("Valor de URL Max Invalidado.");
   System.out.println ("Valor de URLs Max Inválidos.");
  }

  if (searchString.length() < 1) {
   errorList.add ("String de busca faltante.");
   System.out.println ("String de busca faltante");
  }

  if (errorList.size() > 0) {
   System.out.println("err!!");
   return errorList;
  }

  Mova www para fora da URL inicial
  startUrl = removeWwwFromUrl(startUrl);

  toCrawlList.add (startUrl);
  while (toCrawlList.size() > 0) {

   if (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
     intervalo;
    }
   }

   Obtenha a URL no final da lista.
   URL da string = toCrawlList.iterator().next();

   Remova a URL da lista de rastreamento.
   toCrawlList.remove(url);

   Converter a URL da string em objeto URL.
   URL verificadaUrl = verifyUrl(url);

   Pule URL se robôs não tiverem permissão para acessá-la.
   if (!isRobotAllowed(verifiedUrl)) {
    continue;
   }

   Adicionar URLs processadas à crawledList
   crawledList.add(url);
   String pageConteúdo = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Obtenha um link válido na página
    <String> ArrayList links = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(links);

    se (searchStringMatches(pageContents, searchString,
      Sensível a maiúsculas minúsculas)) {
     result.add(url);
     System.out.println(url);
    }
   }

  }
  resultado do retorno;
}

Função principal
public static void main(String[] args) {
  SearchCrawler crawler = novo SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Busca por threads = nova Thread(crawler);
  System.out.println ("Iniciar busca...");
  System.out.println("resultado:");
  search.start();
  try {
   search.join();
  } catch (InterruptedException e) {
   TODO Bloco de captura gerado automaticamente
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Número de downloads: 591)

2.png (72.18 KB, Número de downloads: 596)

3.png (188.46 KB, Número de downloads: 606)





Anterior:PHP representa 82,2% dos principais sites do 100W
Próximo:Visualizador de Código-Fonte Web da Edição Java
Publicado em 30/11/2014 18:07:24 |
Ao ver a notícia de que Jack Ma ainda estava a 300 milhões de alcançar Li Ka-shing para se tornar o homem mais rico da Ásia, dei uma risada profunda e rapidamente conferi meu ranking na Internet, que basicamente não foi afetado, e o ranking permaneceu em cerca de 1,4 bilhão, agora estou aliviado! Na verdade, também sou uma pessoa com sonhos, desde criança, sonhei que um dia dirigiria um Lamborghini esportivo de volta para nossa cidade natal usando óculos escuros, depois de quase 20 anos de trabalho duro, agora o sonho está meio realizado, já tenho meus próprios óculos escuros, só um carro esportivo, o sonho está prestes a se tornar realidade, e fico um pouco animado quando penso nisso!
 Senhorio| Publicado em 30/11/2014 18:28:24 |

Um rastreador de web (também conhecido como web spider, web bot, mais frequentemente chamado de web chaser na comunidade FOAF) é um programa ou script que automaticamente extrai informações sobre a World Wide Web de acordo com certas regras. Outros nomes menos usados são formigas, auto-indexes, emuladores ou worms.
Publicado em 30/11/2014 17:40:16 |
Delver_Si Postado em 30-11-2014 às 17:22
Quero escrever uma ferramenta para explodir o mssql ftp e outras ferramentas, mas não é fácil de usar online

Escreva, eu estou do seu lado!  As ferramentas de demolição geralmente são escritas em .net, e não há muitas escritas em Java, então você pode escrever uma em Java!
Publicado em 30/11/2014 17:19:07 |
Eu limpo, esse é um bom fantoche para fazer uma ferramenta de hacking!
Publicado em 30/11/2014 17:22:22 |
Eu o coletei primeiro, embora agora seja inútil, acredito que será útil no futuro!
 Senhorio| Publicado em 30/11/2014 17:22:42 |
Quero escrever uma ferramenta para explodir o mssql ftp e outras ferramentas, mas não é fácil de usar online
Publicado em 30/11/2014 18:08:16 |
Como assim, não entendo
 Senhorio| Publicado em 30/11/2014 18:32:40 |
admin postado em 2014-11-30 às 17:40
Escreva, eu estou do seu lado!  As ferramentas de demolição geralmente são escritas em .net, e não há muitas escritas em Java, então você pode escrever uma em Java!

O blaster mssql do kit nem consegue acertar o meu,
 Senhorio| Publicado em 30/11/2014 18:33:09 |
Teste publicado em 30-11-2014 às 18:07
Ao ver a notícia de que Jack Ma ainda estava a 300 milhões de distância para alcançar Li Ka-shing e se tornar o homem mais rico da Ásia, seu coração disparou, e ele rapidamente conferiu seu ranking na Internet, e basicamente não foi afetado...

Você é o colete do webmaster, não é?"
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com