Android - 从网站提取数据的选项? (HTML)

时间:2010-09-28 21:42:16

标签: html android html-parsing

我想知道Android上从互联网上托管的HTML网页检索信息的最佳方法是什么?

例如,我希望能够在每天开始时从以下页面获取文本:

http://www.met.ie/forecasts/sea-area.asp

我一直在下载和解析XML文件,但我之前从未尝试过解析HTML类型文件中的信息。

是否存在解析我想要的信息的原生方式?

或者我需要第三方库吗?

或者我是否需要查看屏幕抓取?

3 个答案:

答案 0 :(得分:2)

如果您正在解析HTML,无论您如何操作,都是屏幕抓取。技术从正则表达式到jTidy等第三方库运行。唯一的问题是jTidy在Android上运行吗?我不知道。你必须研究它。

我建议使用正则表达式,编译它们,并缓存Pattern对象以提高性能。

如果您无法获得所需数据的正确Web服务API,那么您总是冒着作者更改布局并移动数据并破坏代码的风险。这就是为什么屏幕抓取通常不受欢迎,只能用作最后的努力。

答案 1 :(得分:2)

如果你不想采用第三方的方式 - 你可以使用webview并向其注入javascript来提取你想要的信息。

示例代码:

WebView webview = new WebView(context);

webView.addJavascriptInterface(new jsInterface() {
           public void parseForcast(String html){
              // do something with html
           }
        }, "Foo");


webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url){
  if (url.equals(FORECAST_URL){
     loadUrl("javascript:window.Foo.parseForecast(document.getElementById('content').innerHTML);");
  }
});

webview.loadUrl(FORECAST_URL);

答案 2 :(得分:1)

  

是否存在解析我想要的信息的原生方式?

没有

  

或者我需要第三方库吗?

  

或者我是否需要查看屏幕抓取?

您正在寻找的内容符合术语“屏幕抓取”,因为它用于网站。正如我在previous question on this topic中所写,要解析HTML,您使用的是HTML解析器。有several open source ones,如果有的话,很有可能一个或多个可以在Android上运行,但很少有修改。