Jsoup-网站上表格数据的排列

时间:2018-10-12 18:32:37

标签: java jsoup

我想从https://ms.wikipedia.org/wiki/Malaysia获取表格。 这是我要从网站上获得的表格。

Table

但是结果不是我想要的。

myResult

我有 2个问题

第一个问题是如何将它们排列成与图片中的表格相似的表格,其排列方式为。以下是我如何获取数据的源代码。

String URL = "https://ms.wikipedia.org/wiki/Malaysia";
Document doc = Jsoup.connect(URL).get();
Elements trs = doc.select("#mw-content-text > div > table:nth-child(148)");
String currentRow = null;
for (Element tr : trs){
    Elements tdDay = tr.select("tr:has(th)");
        currentRow = tdDay.text();
        System.out.print(currentRow);
}

第二个问题来自我的源代码,这是使用https://ms.wikipedia.org/wiki/Malaysia的元素)中抓取特定数据的最佳方法吗? >

Elements trs = doc.select("#mw-content-text > div > table:nth-child(148)");

由于该网站上有 3 个表类,其名称为wikitable。 <table class="wikitable">。那我怎么只叫特定的桌子呢?

2 个答案:

答案 0 :(得分:0)

由于您提供的网站中包含一些wikitable。因此,您可以尝试从表中找出数据的选择器,然后发现有<td><th>

for (int i = x; i < x; i++) {
    Elements trs = doc.select("#mw-content-text > div > table:nth-child(148) > tbody > tr:nth-child(" + i + ") > th");
    Elements tds = doc.select("#mw-content-text > div > table:nth-child(148) > tbody > tr:nth-child(" + i + ") > td");

x循环中的for是表中的行数时尝试此操作,以便它可以抓取数据

答案 1 :(得分:0)

public static void main(String[] args) throws IOException{
    String URL = "https://ms.wikipedia.org/wiki/Malaysia";
    Document doc = Jsoup.connect(URL).get();
    //Select the table which is under the header containing "Trivia" 
    //having the value "wikitable" for the class attribute
    Element table = doc.select("h2:contains(Trivia)+[class=\"wikitable\"]").first();
    //then select each row of the table 
    Elements trs = table.select("tr");
    //for each row get first and second child corresponding to column 1 and two of table
    for (Element tr : trs){
        Element th = tr.child(0);
        Element td = tr.child(1);
        System.out.printf("%-40s %-40s%n",th.text(), td.text());
    }
}