web-dev-qa-db-fra.com

Analyser le HTML du site Web avec JAVA

Je veux analyser un site Web simple et extraire des informations de ce site Web.

J'avais l'habitude d'analyser des fichiers XML avec DocumentBuilderFactory, j'ai essayé de faire la même chose pour le fichier html mais il entre toujours dans une boucle infinie.

    URL url = new URL("http://www.deneme.com");
    URLConnection uc = url.openConnection();

    InputStreamReader input = new InputStreamReader(uc.getInputStream());
    BufferedReader in = new BufferedReader(input);
    String inputLine;

     FileWriter outFile = new FileWriter("orhancan");
     PrintWriter out = new PrintWriter(outFile);

    while ((inputLine = in.readLine()) != null) {
        out.println(inputLine);
    }

    in.close();
    out.close();

    File fXmlFile = new File("orhancan");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);


    NodeList prelist = doc.getElementsByTagName("body");
    System.out.println(prelist.getLength());

Quel est le problème? Ou existe-t-il un moyen plus simple d'extraire les données d'un site Web pour une balise html donnée?

45
CanCeylan

Il existe un moyen beaucoup plus simple de procéder. Je suggère d'utiliser JSoup . Avec JSoup, vous pouvez faire des choses comme

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

Ou si vous voulez le corps:

Elements body = doc.select("body");

Ou si vous voulez tous les liens:

Elements links = doc.select("body a");

Vous n'avez plus besoin d'obtenir de connexions ou de gérer des flux. Simple. Si vous avez déjà utilisé jQuery, il est très similaire à cela.

86
Amir Raminfar

Certainement JSoup est la réponse. ;-)

21
Diego Palomar

HTML n'est pas toujours XML valide et bien formaté. Essayez un analyseur HTML spécial au lieu d'un analyseur XML. Il en existe plusieurs:

http://Java-source.net/open-source/html-parsers

5
Jan