我正在尝试从网页中解析Android中的HTML,并且由于网页形成不好,我得到SAXException
。
有没有办法解析Android中的HTML?
答案 0 :(得分:66)
我刚遇到这个问题。我尝试了一些事情,但决定使用JSoup。 jar大约是132k,这有点大,但是如果你下载源代码并取出一些你不会使用的方法,那么它就不那么大了。
=>关于它的好处是它将处理格式错误的HTML
这是他们网站的一个很好的例子。
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
//http://jsoup.org/cookbook/input/load-document-from-url
//Document doc = Jsoup.connect("http://example.com/").get();
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
答案 1 :(得分:53)
您是否尝试过使用Html.fromHtml(source)?
我认为这个类在源代码质量方面相当自由(它在内部使用TagSoup,它的设计考虑了真实的,糟糕的HTML)。它不支持所有HTML标记,但它确实附带了一个处理程序,您可以实现它对不理解的标记做出反应。
答案 2 :(得分:21)
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
答案 3 :(得分:3)
我们都知道编程有无穷无尽的可能性。有一些解决方案可用于单个问题所以我认为所有上述解决方案都是完美的,可能对某些人有帮助,但对我来说,这个可以节省我的一天......
所以代码就像这样
private void getWebsite() {
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder builder = new StringBuilder();
try {
Document doc = Jsoup.connect("http://www.ssaurel.com/blog").get();
String title = doc.title();
Elements links = doc.select("a[href]");
builder.append(title).append("\n");
for (Element link : links) {
builder.append("\n").append("Link : ").append(link.attr("href"))
.append("\n").append("Text : ").append(link.text());
}
} catch (IOException e) {
builder.append("Error : ").append(e.getMessage()).append("\n");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
result.setText(builder.toString());
}
});
}
}).start();
}
您只需在onCreate Method
MainActivity
中调用上述功能即可
我希望这个对你们有帮助。
另请阅读Medium
上的原始博客答案 4 :(得分:1)
也许您可以使用WebView,但正如您在文档中看到的那样,WebView默认情况下不支持javascript和其他内容,例如小部件。
http://developer.android.com/reference/android/webkit/WebView.html
我认为您可以在需要时启用javascript。