【问题标题】:Parse Web Site HTML with JAVA [duplicate]用 JAVA 解析网站 HTML [重复]
【发布时间】:2012-02-22 16:50:05
【问题描述】:

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

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

【问题讨论】:

  • 首先你可以使用字符串而不是文件。它在哪里进入无限循环?也许是因为来自 url 的输入流似乎没有结束你有这个问题。

标签: java html scrape


【解决方案1】:

有一种更简单的方法可以做到这一点。我建议使用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,那么它与此非常相似。

【讨论】:

  • 首先,谢谢!但是#mp-itn b a 是什么?
  • #mp-itn 只是一个带有id="mp-itn"的容器
  • 查看我的编辑。了解 css 选择器的工作原理会对您有所帮助。
  • 好的,jsoup.org/cookbook/extracting-data/dom-navigation 这正是我需要的,谢谢。
  • 库是比原始代码更好的选择,我会选择它
【解决方案2】:

JSoup 肯定是答案。 ;-)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 2015-06-24
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      相关资源
      最近更新 更多