簡體   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