【问题标题】:Parse data from webpage to android app using Jsoup使用 Jsoup 将数据从网页解析到 Android 应用
【发布时间】:2020-07-28 06:54:56
【问题描述】:

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

我正在使用 Jsoup。我可以使用https://en.wikipedia.org/w/api.php?format=xml&action=parse&page=Template:COVID-19_pandemic_data 获取 html 数据。如果您能指导我如何从 html 文件中提取印度病例和死亡人数。因为 html 文档很大,并且 tr 没有 attr。互联网上没有太多关于此的信息。到目前为止我尝试过的...

 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();
    }

【问题讨论】:

    标签: java android jsoup


    【解决方案1】:

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

    <someTag>...</someTag>
    

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

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

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

    doc.getElementsByTag("text")
    

    您需要将所有&amp;lt;&amp;gt; 标记分别替换为&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,而无需使用多个方法调用来获得所需的内容。 . 更简洁的格式意味着隐藏错误的空间更小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多