【问题标题】:Parsing values from complex table using JSoup使用 JSoup 从复杂表中解析值
【发布时间】:2013-11-23 11:41:32
【问题描述】:

我有一个带有以下 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>
...

我需要解析&lt;TR&gt; 得到类似的数据

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 代码来解析我需要的信息吗?

【问题讨论】:

    标签: java web-scraping html-table jsoup html-parsing


    【解决方案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");
                }
    }
    

    【讨论】:

    • 我想它也会给你一个世界“会计”。但我很高兴你找到了解决方案。
    【解决方案2】:

    我没有时间测试,但你可以使用这样的东西:

            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());
            }
    

    你得到表格第三行的孩子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 2011-07-20
      • 2014-01-01
      • 2019-10-10
      相关资源
      最近更新 更多