如何从Codename One中的网站解析特定数据?

时间:2017-06-22 19:59:23

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

我遇到了开发我的Codename One应用程序的障碍。我项目中的一个课程解析了3个特定的html" td"来自网站的元素并将文本保存到字符串,然后我将该文本数据输入到Codename One多按钮中。我最初使用jSoup进行此操作但很快意识到Codename One不支持第三方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");
}

此方法适用于模拟器(并提供"折旧API"警告),但在签名后在线提交构建时不会运行。我已经导入了parse4cn1和cn1JSON库并且遇到了一系列障碍,但是当我提交时仍然会收到构建错误。我想重新开始并使用替代方法(如果存在)。有没有办法可以重写这段代码而不必使用这些库?也许通过使用XMLParser类?

1 个答案:

答案 0 :(得分:1)

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

我过去曾使用XMLParser作为此用例。它应该与HTML一起使用,因为它最初设计用于显示HTML。

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

很可能没有为你实际上没有看到渲染的网站调用onLoad,所以问题是设备上特别失败的是什么?