HTML未正确下载

时间:2013-12-12 08:52:43

标签: java html jsoup

我一直在尝试下载Google新闻RSS Feed的源代码。除了显示奇怪的链接外,它已正确下载。

static String urlNotizie = "https://news.google.it/news/feeds?pz=1&cf=all&ned=it&hl=it&output=rss";
Document docHtml = Jsoup.connect(urlNotizie).get();
String html = docHtml.toString();
System.out.println(html);

输出:

<html>
 <head></head>
 <body>
  <rss version="2.0">
   <channel>
    <generator>
     NFE/1.0
    </generator>
    <title>Prima pagina - Google News</title>
    <link />http://news.google.it/news?pz=1&amp;ned=it&amp;hl=it
    <language>
     it
    </language>
    <webmaster>
     news-feedback@google.com
    </webmaster>
    <copyright>
     &amp;copy;2013 Google
    </copyright> [...]

使用URLConnection我能够输出正确的页面来源。但是在解析过程中,我遇到了与上面相同的问题,它会吐出<link />.的列表(同样只有链接。解析其他的东西工作正常)。 URLConnection示例:

        URL u = new URL(urlNotizie);
        URLConnection yc = u.openConnection();

        StringBuilder builder = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                yc.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            builder.append(line);
            builder.append("\n");
        }
        String html = builder.toString();
        System.out.println("HTML " + html);

        Document doc = Jsoup.parse(html);

        Elements listaTitoli = doc.select("title");
        Elements listaCategorie = doc.select("category");
        Elements listaDescrizioni = doc.select("description");
        Elements listaUrl = doc.select("link");
        System.out.println(listaUrl);

1 个答案:

答案 0 :(得分:1)

Jsoup被设计为HTML parser,而不是XML(也不是RSS)解析器。

HTML <link> element被指定为没有任何正文。 invalid有一个<link>元素,其主体与XML一样。

您可以使用Jsoup解析XML,但您需要明确地tell切换到XML parsing mode

替换

Document docHtml = Jsoup.connect(urlNotizie).get();

通过

Document docXml = Jsoup.connect(urlNotizie).parser(Parser.xmlParser()).get();