试图从网页上的表格中提取信息

时间:2018-01-18 06:41:02

标签: web-scraping jsoup screen-scraping webpage children

我对java和HTML相当新。我一直试图从网页上的表中提取信息一段时间无济于事。根据我从浏览其他问题的理解,我知道我需要使用Jsoup(或其他类似但我使用Jsoup的东西)从网站上获取数据,但是当涉及到&时,我感到很困惑。 #34;节"和#34;孩子"什么不是为了找到我想要的具体信息。

String margins = "https://platinumtokens.com/";

    Document doc = Jsoup.connect(margins).get();
    Elements tableElements = doc.select("div");

    System.out.println(doc);
    System.out.println(tableElements.get(0));

我需要保存项目的名称和数组中的项目价格或组织它们的东西,但我仍然坚持如何将它们从网页中拉出来。

感谢您的帮助:)

编辑:我并不完全熟悉Java变量,但我希望将每个项目放入一个列表,其中包含买入价和卖出价,保证金,回报百分比和交易金额

1 个答案:

答案 0 :(得分:0)

您需要使用selenium web驱动程序,因为此网页使用Javascript来显示项目表。 我用phantomjs创建了一个测试代码。

http://www.seleniumhq.org/projects/webdriver/

http://phantomjs.org/

https://github.com/bonigarcia/webdrivermanager

public void test2() {

    // web driver setup
    PhantomJsDriverManager.getInstance().setup();
    PhantomJSDriver driver = new PhantomJSDriver();

    // access the web page
    driver.get("https://platinumtokens.com/");

    // wait for loading
    while (!(driver.executeScript("return document.readyState").equals("complete"))) {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // list to store item infomation
    List<Info> infos = new ArrayList<>();

    // get  tr tags
    List<WebElement> tr = driver.findElementsByTagName("tr");
    for (WebElement e: tr) {
        // get td tags inside a tr tag
        List<WebElement> td = ((RemoteWebElement) e).findElementsByTagName("td");
        if (!td.isEmpty()) {
            String name = ((RemoteWebElement) td.get(1)).findElementByTagName("a").getText();
            Info info = new Info(name, td.get(2).getText(), td.get(3).getText());
            infos.add(info);
        }
    }

    // display infomation
    for (Info info: infos) {
        System.out.println(info.toString());
    }
}

// to store a data
public static class Info {
    private String item;
    private String buy;
    private String sell;

    public Info(String item, String buy, String sell) {

        this.item = item;
        this.buy = buy;
        this.sell = sell;
    }

    @Override
    public String toString() {
        return "Info{" +
                "item='" + item + '\'' +
                ", buy='" + buy + '\'' +
                ", sell='" + sell + '\'' +
                '}';
    }
}