【问题标题】:Android - Options for pulling data from a website? (HTML)Android - 从网站提取数据的选项? (HTML)
【发布时间】:2011-04-18 13:13:13
【问题描述】:

我想知道在 Android 上从 Internet 上托管的 HTML 页面中检索信息的最佳方法是什么?

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

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

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

有没有本地方法来解析我想要的信息?

或者我需要第三方库吗?

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

【问题讨论】:

  • 只是添加到这个 JSoup 在 Android 上运行良好

标签: html android html-parsing


【解决方案1】:

如果你在解析 HTML,不管你怎么做,你都是在屏幕抓取。技术从正则表达式运行到 jTidy 等 3rd 方库。唯一的问题是 jTidy 可以在 Android 上运行吗?我不知道。你必须研究它。

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

如果您无法为您想要的数据获得适当的 Web 服务 API,那么您总是冒着作者更改布局、将数据移动到您身上并破坏您的代码的风险。这就是为什么屏幕抓取通常不受欢迎,仅用作最后的努力。

【讨论】:

    【解决方案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);
    

    【讨论】:

      【解决方案3】:

      有没有本地方法来解析我想要的信息?

      没有。

      或者我需要第三方库吗?

      是的。

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

      您要执行的操作符合“屏幕抓取”一词,因为它用于网站。正如我在previous question on this topic 中所写,要解析 HTML,您需要使用 HTML 解析器。有several open source ones,很可能有一个或多个可以在 Android 上运行,如果有的话,几乎不需要修改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-25
        • 2018-04-03
        • 2013-03-05
        • 1970-01-01
        • 1970-01-01
        • 2015-06-09
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多