【发布时间】:2015-10-08 03:55:51
【问题描述】:
所以我正在尝试使用 dom4j 以编程方式解析 Java 播客的 RSS 提要。
代码是这样的,并且可以流畅地运行大量的提要:
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
String line;
while((line = reader.readLine()) != null)
{
this.xmlData += line + "\n";
}
reader.close();
PrintWriter writer = new PrintWriter("rss_feed.txt", "UTF-8");
writer.println(this.xmlData);
writer.close();
this.document = DocumentHelper.parseText(this.xmlData);
然后我遇到了问题提要!提要的网址是:https://marxismtodaypodcast.wordpress.com/category/audio/feed/
现在奇怪的是,如果我在浏览器中查看这个页面,它看起来就像一个普通的 RSS 提要,充满了预期的元素。
即使这个提要验证器也确认它是格式正确的提要:
https://validator.w3.org/feed/
但是,如果我读取 url 并将其保存到文件中,它看起来与我在 URL 中看到的提要完全不同,并且包含大量 javascript,并且根本没有正常的 元素,不是甚至在 javascript 代码中。
dom4j 解析器讨厌我从 url 下载的提要,并抛出一系列时髦的异常,因为该页面是 .html 页面而不是 xml 页面。
我怀疑页面中的 javascript 以某种方式创建了我们在浏览器中看到的输出。有什么方法可以下载我们在浏览器中看到的而不是原始的 javascript 文件?我想以一种可以自动化的方式来做这件事,所以不要太老套!
或者也许我完全找错了树,还有其他事情发生吗?
编辑 1:尝试在 HTTP 标头中接受 XML
所以我尝试让 HttpURLConnection 接受 xml,正如评论者 Julien Genestoux 所建议的那样。这是我尝试过的代码:
HttpURLConnection connection = (HttpURLConnection)feed.openConnection();
connection.setRequestProperty("Accept","application/atom+xml,application/rdf+xml,application/rss+xml,application/xml,text/xml");
connection.connect();
String content_type = connection.getContentType();
System.out.println("content = " + content_type);
但是,当我运行它时,我得到了相同的数据,内容如下:
text/html; charset=UTF-8
我的编码是否正确?我认为我有问题,因为这个 RSS 提要确实验证正确,所以必须可以从这个 url 获取 xml 格式的数据....
【问题讨论】:
-
所以我发现 rss 提要的类型是:text/html、charset=UTF-8 而不是 text/xml、application/xml 或 application/rss+xml.... . 有人知道如何转换吗?
标签: javascript java wordpress xml-parsing rss