我想知道Android上从互联网上托管的HTML网页检索信息的最佳方法是什么?
例如,我希望能够在每天开始时从以下页面获取文本:
http://www.met.ie/forecasts/sea-area.asp
我一直在下载和解析XML文件,但我之前从未尝试过解析HTML类型文件中的信息。
是否存在解析我想要的信息的原生方式?
或者我需要第三方库吗?
或者我是否需要查看屏幕抓取?
答案 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上运行,但很少有修改。