web-dev-qa-db-ja.com

JAVAでWebサイトのHTMLを解析

単純なWebサイトを解析し、そのWebサイトから情報を取得したい。

DocumentBuilderFactoryを使用してXMLファイルを解析していました。htmlファイルに対しても同じことをしようとしましたが、常に無限ループに陥りました。

    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());

何が問題ですか?または、特定のhtmlタグのWebサイトからデータを取得する簡単な方法はありますか?

45
CanCeylan

これを行うには、はるかに簡単な方法があります。 JSoup を使用することをお勧めします。 JSoupを使用すると、次のようなことができます

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

または、体が必要な場合:

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

または、すべてのリンクが必要な場合:

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

接続を取得したり、ストリームを処理したりする必要はなくなりました。シンプル。 jQueryを使用したことがある場合、それは非常によく似ています。

86
Amir Raminfar

間違いなく JSoup が答えです。 ;-)

21
Diego Palomar

HTMLは常に有効で、適切にフォーマットされたXMLとは限りません。 XMLパーサーの代わりに特別なHTMLパーサーを試してください。いくつかの異なるものが利用可能です:

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

5
Jan