我正在尝试从网页中解析android中的HTML,由于该网页的格式不正确,我得到SAXException

是否可以解析Android中的HTML? >

评论

我怀疑Rhino依赖项将使htmlunit难以在Android上进行编译,但是您可以尝试...另外,某些其他非严格的HTML解析器(例如汤)也可以工作。

我想知道是否可以在这里使用webkit。

#1 楼

我刚遇到这个问题。我尝试了几件事,但决定使用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();
}


评论


您可以尝试包括完整的jar,然后在生产版本中的应用程序上运行ProGuard,以清除未使用的代码。

–安德鲁·麦肯齐(Andrew Mackenzie)
13年11月21日在17:50

注意:JSoup非常慢。

–凯文
2014年3月3日在6:39

@kevin该说法的来源?您可能启用了一些调试功能。

– goetzc
16年9月2日在16:45

在客户端呈现html页面期间使用Java脚本动态加载内容怎么办? Jsoup也将显示此内容吗?

–MikeL
16年11月6日在14:04

#2 楼

您是否尝试过使用Html.fromHtml(source)?

我认为该类在源代码质量方面相当宽松(它内部使用TagSoup,该标签在设计时考虑到了现实生活中的不良HTML) 。虽然它不支持所有HTML标记,但是它确实提供了一个处理程序,您可以实现该处理程序以对不了解的标记做出反应。

评论


这很简单,我无法搜索确切的内容(例如XPATH)

–user586399
2015年11月9日在12:08

请注意。这将“挂起所有线程”。我面对比当它带有html格式文本的json。正确显示html文本没有问题,但是使用html.fromhtml()后,我遇到了这个问题。

–大卫
16-2-23在13:37

#3 楼

String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();


评论


漂亮简单,没有插件,喜欢它! tnxs

–RonEskinder
15年12月16日在18:28

注意:在从Html.fromHtml(str)返回的Spanned对象上调用toString()将使许多HTML标记不起作用(包括 )。因此,如果您要设置textview,请执行以下操作:myTextView.setText(Html.fromHtml(str))

– Sakiboy
16年5月11日在19:34



@Sakiboy你是对的。除此之外,还有许多其他标记不适用于Html.fromHtml()。检查一下stackoverflow.com/a/3150456/1987045

–拉胡尔(Rahul Raveendran)
16-09-28在13:13

太棒了,正是我想要的,我的服务器端开发人员正在向我发送html,现在我可以轻松地将其转换为原始字符串了,谢谢

–祖尔古纳·贾特(Zulqurnain Jutt)
18年4月6日在8:05

#4 楼

我们都知道编程具有无限的可能性。对于一个问题,有很多解决方案可供选择,因此我认为上述所有解决方案都是完美的,对某人可能会有帮助,但对我来说,这可以节省我的时间。

所以代码就是这样的

  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 MethodMainActivity中调用上述函数

我希望这对你们也有帮助。

还请阅读Medium中的原始博客

#5 楼

也许您可以使用WebView,但是正如您在文档中所看到的,WebView默认情况下不支持javascript和其他诸如小部件之类的东西。 webkit / WebView.html

我认为您可以根据需要启用javascript。

评论


是的,您可以轻松启用JS。但无需使用webview进行html解析。

–人
2012年5月28日12:26

那没有回答问题

–luckyhandler
15年6月16日在21:51