0

次のhtmlを含むテーブルがあります。

<TABLE class=data-table cellSpacing=0 cellPadding=0>
  <TBODY>
  <TR>
    <TD colSpan=4><A id=accounting name=accounting></A>
      <H3>Accounting</H3></TD></TR>
  <TR>
    <TH class=data-tablehd align=left>FORM NO.</TH>
    <TH class=data-tablehd align=left>TITLE</TH>
    <TH class=data-tablehd align=right>Microsoft</TH>
    <TH class=data-tablehd align=right>Acrobat</TH></TR>
  <TR>
    <TD><A id=1008ft name=1008ft>SF 1008-FT</A></TD>
    <TD>Work for Others Funding Transfer Between Projects for an Agreement</TD>
    <TD align=right><A 
      href="https://someurl1" 
      target=top>MS Word</A></TD>
    <TD align=right><A 
      href="https://someurl2" 
      target=top>PDF </A></TD></TR>
...

<TR>次のようなデータを取得して解析する必要があります

SF 1008-FT, Work for Others ... an Agreement, https://someurl1, https://someurl2

次のコードを使用してみました。

    URL formURL = new URL("http://urlToParse");
    Document doc = Jsoup.parse(formURL, 3000);

    Element table = doc.select("TABLE[class = data-table]").first();
    Iterator<Element> ite = table.select("td[colSpan=4]").iterator();

    while(ite.next() != null) {
        System.out.println(ite.next().text());
    }

ただし、これは「トップに戻る」とテーブル全体にあるいくつかの異なる見出しのみを返します。

誰かが必要な情報を解析するための正しい JSoup コードを書くのを手伝ってくれますか?

4

2 に答える 2

3

テストする時間はありませんが、次のようなものを使用できます。

        Element table = doc.select("TABLE[class = data-table]").first();
        Elements rows = table.select("tr");

        for (Element td: rows.get(2).children()) {
            System.out.println(td.text());
        }

テーブルの 3 行目の子を取得します。

于 2013-11-12T00:39:10.110 に答える
1

同様のスレッドを少し変更して解決策を見つけました。ソリューションを提供するコードを以下に示します。

for (Element table : doc.select("table")) {
        for (Element row : table.select("tr")) {
            Elements tds = row.select("td");
            formNumber = tds.get(0).text();
            title = tds.get(1).text();
            link1 = tds.get(2).select("a[href]").attr("href");
            link2 = tds.get(3).select("a[href]").attr("href");
            }
}
于 2013-11-12T15:46:39.290 に答える