【问题标题】:How do I parse specific data from a website within Codename One?如何解析来自 Codename One 中网站的特定数据?
【发布时间】:2017-11-26 06:15:57
【问题描述】:

我在开发我的 Codename One 应用程序时遇到了障碍。我项目中的一个类从网站解析 3 个特定的 html“td”元素,并将文本保存到字符串中,然后我将文本数据输入到 Codename One 多按钮中。我最初使用 jSoup 进行此操作,但很快意识到 Codename One 不支持 3rd 方 jar 文件,因此我使用了这种方法,如下所示。

public void showOilPrice() {
    if (current != null) {
        current.show();
        return;
    }
    WebBrowser b = new WebBrowser() {
        @Override
        public void onLoad(String url) {
            BrowserComponent c = (BrowserComponent) this.getInternal();
            JavascriptContext ctx = new JavascriptContext(c);
            String wtiLast = (String) ctx.get("document.getElementById('pair_8849').childNodes[4].innerText");
            String wtiPrev = (String) ctx.get("document.getElementById('pair_8849').childNodes[5].innerText");
            String wtiChange = (String) ctx.get("document.getElementById('pair_8849').childNodes[8].innerText");
            Form op = new Form("Oil Prices", new BoxLayout(BoxLayout.Y_AXIS));
            MultiButton wti = new MultiButton("West Texas Intermediate");
            Image icon = null;
            Image emblem = null;
            wti.setEmblem(emblem);
            wti.setTextLine2("Current Price: " + wtiLast);
            wti.setTextLine3("Previous: " + wtiPrev);
            wti.setTextLine4("Change: " + wtiChange);
            op.add(wti);
            op.show();
        }
    };
    b.setURL("https://sslcomrates.forexprostools.com/index.php?force_lang=1&pairs_ids=8833;8849;954867;8988;8861;8862;&header-text-color=%23FFFFFF&curr-name-color=%230059b0&inner-text-color=%23000000&green-text-color=%232A8215&green-background=%23B7F4C2&red-text-color=%23DC0001&red-background=%23FFE2E2&inner-border-color=%23CBCBCB&border-color=%23cbcbcb&bg1=%23F6F6F6&bg2=%23ffffff&open=show&last_update=show");
}

此方法在模拟器中有效(并给出“depreciated API”警告),但当我在签名后在线提交构建时不会运行。我已经导入了 parse4cn1 和 cn1JSON 库并经历了一系列的障碍,但我在提交时仍然收到构建错误。如果存在,我想重新开始并使用另一种方法。有没有一种方法可以重写这段代码而不必使用这些库?也许通过使用 XMLParser 类?

【问题讨论】:

    标签: web-scraping jsoup html-parsing codenameone parse4cn1


    【解决方案1】:

    已弃用 WebBrowser 类。您可以直接使用BrowserComponent,因此WebBrowser 在这种情况下是多余的。

    我过去在这个用例中使用了XMLParser。它应该与 HTML 一起使用,因为它最初是为显示 HTML 而设计的。

    也可以将 JSoup 移植到 Codename One,尽管我不确定所涉及的工作范围。

    很可能没有为您实际上没有看到渲染的站点调用 onLoad,所以问题是设备上具体失败的原因是什么?

    【讨论】:

    • onLoad 是我的问题。我切换到 XMLParser,现在一切似乎都运行良好。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2014-06-29
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多