java - 检索正确(完整)的 html

标签 java android html

我的目标是检索网站的 html,并将其转换为可读的String。我下面的代码可以工作,但我遇到了一个技术问题:当我尝试检索 http://time.gov/HTML5html 时,我在 android 输出上得到的 String 与我在网站上看到的 html 不同(我右键单击时看到的 html页面并单击 Google Chrome 上的检查元素)。具体来说,当我使用 Inspect Element 时,我看到 html 代码的一部分如下所示

<div class="lzswftext" style="font-family: Arial, Verdana; font-weight: bold; pointer-events: none; width: 319px; height: 60px; font-size: 50px; line-height: 60px;">12:35:54 p.m.</div>

但是,在我的 Android 输出中,我没有看到类似的内容(根本没有“时间”文本 [XX:XX:XX])。有谁知道为什么会发生这种情况,以及如何修复它以获得与 Android 输出上的 Inspect Element 上显示的相同的 html

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DownloadTask task = new DownloadTask();
        task.execute("http://time.gov/HTML5");

    }

    private class DownloadTask extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... urls) {
            HttpResponse response = null;
            HttpGet httpGet = null;
            HttpClient mHttpClient = null;
            String s = "";

            try {
                if(mHttpClient == null){
                    mHttpClient = new DefaultHttpClient();
                }


                httpGet = new HttpGet(urls[0]);


                response = mHttpClient.execute(httpGet);
                s = EntityUtils.toString(response.getEntity(), "UTF-8");


            } catch (IOException e) {
                e.printStackTrace();
            } 
            return s;
        }

        @Override
        protected void onPostExecute(String result){
            final TextView textview1 = (TextView) findViewById(R.id.headline);
            textview1.setText(result);

        }
    }
}

最佳答案

如果有什么是“正确的 HTML”,那么它就是您从服务器获取的原始 HTML 页面(您正确实现了该页面)。您在浏览器中看到的“检查元素”是脚本在浏览器中动态修改原始页面的结果(就此而言,这可能涉及也可能不涉及与原始服务器或任何其他服务器的进一步交互)。

特别是,http://time.gov/HTML5使用 JavaScript 来完成它的工作。您的代码只是获取 HTML 页面,该页面实际上在您提到的 div 中没有任何“时间文本”。只有在实际的浏览器额外执行嵌入的 JavaScript 代码、下载一些额外包含的脚本文件并执行这些文件之后,任何时候都会将输出输出到 div 元素。

您不能指望在从服务器获取的“原始”HTML 中看到脚本的结果。我认为您没有一种健全的(简单且安全的)方法来解析响应中的 HTML 并执行其脚本,但我可能是错的。

如果您想获取当前时间并且不仅仅使用上述网站作为示例,那么肯定有更好的方法来实现您想要的。例如,看一下here .

关于java - 检索正确(完整)的 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25020535/

相关文章:

html - 有没有CSS生成器

java - 计算 if 语句中字符串中的表达式

android - 使用表示资源名称的变量访问 R.string 的内容

html - 文字不会环绕图像

Java AsyncTask 将变量传递给主线程

java - Android - AsyncTask 中的 doInBackground() 错误

html - 垂直对齐不适用于第一页加载

java - NetBeans 库类型

java - 订购另一个人的 Collection

java - 使用 TreeMap 填充 ComboBox