46

我想解析一个简单的网站并从该网站上抓取信息。

我曾经用 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 标签抓取数据?

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 回答
22

绝对JSoup是答案。;-)

于 2013-05-08T13:31:07.937 回答
5

HTML 并不总是有效的、格式良好的 XML。尝试使用特殊的 HTML 解析器而不是 XML 解析器。有几个不同的可用:

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

于 2012-01-30T22:16:33.893 回答