Estou realizando um trabalho da faculdade, e estou tendo dificuldades para realizar o parser em html do meu código.
Estou conseguindo realizar a busca de qualquer DNS digitado pelo usuário, porém o meu "System.out.println" mostra todo o código fonte html.
Se alguém puder me dar uma dica de qual biblioteca com o javadoc desta APi de como implementar ao meu código, agradeço.
Abaixo segue o que consegui realizar!
importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLConnection;importjava.util.Scanner;publicclassPrincipal{publicstaticvoidmain(String[]args){System.out.println("Bem Vindo! ");Scannerler=newScanner(System.in);System.out.print("\nDigite aqui o endereço Http: ");Stringprincipal=ler.nextLine();System.out.println("\n"+principal+"\n");URLurl;try{// get URL content// String principal = null;url=newURL(principal);URLConnectionconn=url.openConnection();// open the stream and put it into BufferedReaderBufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));StringinputLine;while((inputLine=br.readLine())!=null){System.out.println(inputLine);}br.close();System.out.println("Done");}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}
Olá pessoal!
Estou conseguindo realizar a busca de qualquer DNS digitado pelo usuário, porém o meu “System.out.println” mostra todo o código fonte html.
Pergunta. Uma vez que você fez o parsing, o que vai fazer com os dados?
a) Vou procurar a tag e imprimir apenas o título dessa página. (Precisa de mais?)
b) Vou remover todas as tags e comentários, e vou imprimir apenas o texto. (Serve para alguma coisa útil? Texto bruto de um site normalmente não serve para muita coisa)
c) Alguma coisa que você não pensou ainda.
O curl (um programa do Linux que puxa páginas a partir de uma URL) não faz qualquer parsing porque supõe-se que o usuário vá fazer alguma coisa útil com o HTML depois.
M
Mauricio_Hirsch
Olá amigo!
Desculpa-me acabei não expressando claramente o meu problema!
O que eu preciso é colher no código html e mostra todos os link de qualquer página pesquisada no programa, porém eu apenas estou conseguindo mostrar o código fonte HTML.
Estou pensando em alguma forma mas não encontrei ainda alguma forma, por isso estou aceitando e pedindo sugestões de alguém possa me ajudar.
Eu pensei em programar em um método de enlace que percorra todo o código fonte html e coloque em um ArrayList, após finalizando com System.
Aconselharia a pôr os links em um Set em vez de um ArrayList porque os links se repetem muito em uma página - você quer baixar um link apenas uma vez.
M
Mauricio_Hirsch
Implementei o seu código no meu, mas confesso que não entendi muito bem, você poderia me explicar melhor?
E está rodando mas gera uma
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Principal.main(Principal.java:64)exception
importjava.io.InputStreamReader;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLConnection;importjava.util.ArrayList;importjava.util.Scanner;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPrincipal{publicstaticvoidmain(String[]args){System.out.println("Bem Vindo! ");Scannerler=newScanner(System.in);System.out.print("\nDigite aqui o endereço Http: ");Stringprincipal=ler.nextLine();System.out.println("\n"+principal+"\n");// Pattern pat = Pattern.compile ("href\\s*=\\s*(\"([^\"]+)\"|'([']+)')", Pattern.CASE_INSENSITIVE);URLurl;try{// get URL content // String principal = null; url=newURL(principal);URLConnectionconn=url.openConnection();// open the stream and put it into BufferedReader BufferedReaderbr=newBufferedReader(newInputStreamReader(conn.getInputStream()));StringinputLine;while((inputLine=br.readLine())!=null){System.out.println(inputLine);}br.close();System.out.println("Done");}catch(MalformedURLExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}Patternpat1=Pattern.compile("href\\s*=\\s*(\"([^\"]+)\"|'([']+)')",Pattern.CASE_INSENSITIVE);try{BufferedReaderbr=newBufferedReader(newFileReader(args[0]));for(Stringline=br.readLine();line!=null;line=br.readLine()){Matchermat=pat1.matcher(line);while(mat.find()){System.out.println(mat.group(2).isEmpty()?mat.group(3):mat.group(2));}}}catch(IOExceptionex){ex.printStackTrace();}}}