46

単純な 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 サイトからデータをスクレイピングする簡単な方法はありますか?

4

3 に答える 3

90

これを行うには、もっと簡単な方法があります。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 を使用したことがある場合は、それと非常によく似ています。

于 2012-01-30T22:14:14.757 に答える
5

HTML は常に有効で、整形式の XML であるとは限りません。XML パーサーの代わりに、特別な HTML パーサーを試してください。利用可能ないくつかの異なるものがあります:

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

于 2012-01-30T22:16:33.893 に答える