繁体   English   中英

使用 Jsoup 将数据从网页解析到 android 应用程序

[英]Parse data from webpage to android app using Jsoup

我的 android 应用程序有一部分是我需要解析来自 wikipedia.com 的数据并在应用程序中使用它。 当我从 go 到https://en.wikipedia.org/wiki/Template:COVID-19_pandemic_data 时,我可以看到 covid19 病例。 我想从表中检索号码

维基百科网页截图

我正在使用 Jsoup。 I am able to get html data by using this https://en.wikipedia.org/w/api.php?format=xml&action=parse&page=Template:COVID-19_pandemic_data .If you can guide me how can i extract the india cases和 html 文件中的死亡。 因为 html 文档很大,并且没有 tr 的属性。 互联网上没有太多关于此的信息。 到目前为止我尝试过的...

 private void getWebsite() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                final StringBuilder builder = new StringBuilder();
                String web_link = "https://en.wikipedia.org/w/api.php?format=xml&action=parse&page=Template:COVID-19_pandemic_data";
                try {
                    Document doc = Jsoup.connect(web_link).get();
                    String title = doc.title();
                    Elements links = doc.select("tr");


                    builder.append(title).append("\n");
                    for(Element link : links){
                        builder.append(link);
                    }

                } catch (IOException e) {
                    builder.append("Error : ").append(e.getMessage()).append("\n");
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText(builder.toString());
                    }
                });
            }
        }).start();
    }

问题与数据格式(XML)有关。 当您向下导航 XML 元素时,您会发现通过浏览器查看文档中显示的内容是:

<someTag>...</someTag>

但实际存在的是字符串的 xml 编码版本:

&lt;someTag&gt;...&lt;/someTag&gt;

JSoup 无法正常工作,您需要进一步处理以将 output 转换为更多 XML 以使其正常工作。 您可以通过查看以下结果自行测试:

doc.getElementsByTag("text")

你需要替换所有&lt; &gt; 分别带有< , >的标记。

这是我尝试过的,以及在无法拉出tbody / thead / th之后进行的一些小编辑。然后我开始尝试从顶级标签中拉出,从api开始,深入到 DOM 中。

final StringBuilder builder = new StringBuilder();
        String url = "https://en.wikipedia.org/w/api.php?format=xml&action=parse&page=Template:COVID-19_pandemic_data";
        try {
            Document doc = Jsoup.connect(url).get();
            String title = doc.getElementsByTag("parse").attr("title");

另外值得一提的是,这里的文档中有一些非常好的示例: https://jsoup.org/cookbook/extracting-data/dom-navigation

最后,为了它的价值,我将 URL 更改为: https://en.wikipedia.org/wiki/Template:COVID-19_pandemic_data让 JSoup 的使用更轻松来自 HTML 而不是 XML 的数据。

在我看来,如果你有选择,HtmlUnit 将是一个更好的工具,因为你可以简单地为你想要提取的 HTML 元素指定一个 XPath 而不必使用多个方法调用来获得你想要的......更多简洁的格式意味着隐藏错误的空间更小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM