第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用 JSoup 從網(wǎng)站獲取多個(gè)表

如何使用 JSoup 從網(wǎng)站獲取多個(gè)表

qq_笑_17 2022-06-23 19:23:19
我需要關(guān)閉所有 9 張桌子:https://www.basketball-reference.com/players/c/collijo01.html我當(dāng)前的代碼只做 1 個(gè)表。我將 .first() 切換到 .last() 不起作用。我嘗試使用 ("table.totals") 按名稱獲取表,但也失敗了。public static void getData(String url) throws IOException{    String fileName = "table.csv";    FileWriter writer = new FileWriter(fileName);    Document doc = Jsoup.connect(url).get();    Element tableElement = doc.select("table").first();    System.out.println(doc);    Elements tableHeaderEles = tableElement.select("thead tr th");    for (int i = 0; i < tableHeaderEles.size(); i++) {        writer.append(tableHeaderEles.get(i).text());        if(i != tableHeaderEles.size() -1){                         writer.append(',');        }    }    writer.append('\n');    System.out.println();    Elements tableRowElements = tableElement.select(":not(thead) tr");    for (int i = 0; i < tableRowElements.size(); i++) {        Element row = tableRowElements.get(i);        Elements rowItems = row.select("td");        for (int j = 0; j < rowItems.size(); j++) {            writer.append(rowItems.get(j).text());            if(j != rowItems.size() -1){                writer.append(',');            }        }        writer.append('\n');    }    writer.close();}我完美地從該網(wǎng)站獲得了第一張桌子,但無法超越。有誰知道如何根據(jù) ID 獲取所有表格或抓取表格?編輯:如果有人想為自己完全測(cè)試這個(gè)編碼的輸出 public static void read(String file) throws IOException {    Scanner scanner = new Scanner(new File(file));    scanner.useDelimiter(",");    while(scanner.hasNext()){        System.out.print(scanner.next()+"|");    }    scanner.close();}
查看完整描述

1 回答

?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

您已經(jīng)選擇了所有表,但您明確地只獲得了第一個(gè):


Element tableElement = doc.select("table").first();

相反,您可以輕松地遍歷所有這些:


Elements tableElements = doc.select("table");

for (Element tableElement : tableElements) {

   // for each of selected tables

}

因此,經(jīng)過一些修改以獲得唯一的文件名后,代碼將如下所示:



public static void getData(String url) throws IOException {

    String html = Jsoup.connect(url).execute().body();

    // this one is tricky as it contains tables as commented out HTML, and shows them using javascript code

    // so I'm using dirty replace to remove comment tags before parsing to make tables visible to Jsoup

    html = html.replaceAll("<!--", "");

    html = html.replaceAll("-->", "");

    Document doc = Jsoup.parse(html);

    Elements tableElements = doc.select("table");

    int number = 1;

    for (Element tableElement : tableElements) {

        String tableId = tableElement.id();

        if (tableId.isEmpty()) {

            // skip table without id

            continue;

        }

        tableId = " with id " + tableId;

        String fileName = "table" + number++ + tableId + ".csv";

        FileWriter writer = new FileWriter(fileName);


        System.out.println(doc);


        Elements tableHeaderEles = tableElement.select("thead tr th");

        for (int i = 0; i < tableHeaderEles.size(); i++) {

            writer.append(tableHeaderEles.get(i).text());


            if (i != tableHeaderEles.size() - 1) {

                writer.append(',');

            }

        }

        writer.append('\n');

        System.out.println();


        Elements tableRowElements = tableElement.select(":not(thead) tr");


        for (int i = 0; i < tableRowElements.size(); i++) {

            Element row = tableRowElements.get(i);

            Elements rowItems = row.select("td");

            for (int j = 0; j < rowItems.size(); j++) {

                writer.append(rowItems.get(j).text());


                if (j != rowItems.size() - 1) {

                    writer.append(',');

                }

            }

            writer.append('\n');

        }


        writer.close();

    }

}

回答你的第二個(gè)問題:


根據(jù) ID 抓取表


而不是選擇所有表的第一個(gè)表:


Element tableElement = doc.select("table").first();

選擇具有 id 的表的第一個(gè)表advanced:


Element tableElement = doc.select("table#advanced").first();

附加建議:您作為參數(shù)提供的東西select(...)是CSS 選擇器。


查看完整回答
反對(duì) 回復(fù) 2022-06-23
  • 1 回答
  • 0 關(guān)注
  • 190 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)