【问题标题】:use jsoup extract certain part of text使用 jsoup 提取文本的某些部分
【发布时间】:2013-05-30 21:40:51
【问题描述】:

我有一个网页,其源代码包含几个类似的结构,如下所示:

<tr>
<td width="10%" bgcolor="#FFFFFF"><font class="bodytext9">1-Jun-2013</font></td>
<td width="4%" bgcolor="#FFFFFF" align=center><font class="bodytext9">Sat</font></td>
<td width="5%" bgcolor="#FFFFFF" align="center"></td>
<td width="5%" bgcolor="#FFFFFF" align="center"><font class="bodytext9">Another Text</font></td>
<td width="5%" bgcolor="#FFFFFF" align="center"><font class="bodytext9"><img src="img/colors/white.gif"></font></td>
<td width="15%" bgcolor="#FFFFFF" align="center"><a class="black_9" href="link2">Here is also Text</a></td>
<td width="15%" bgcolor="#FFFFFF" align="center"><a href="LINKtoWeb" class=list><u>STRING TO CAPTURE</u></a></td>
<td width="4%" bgcolor="#FFFFFF" align="center"><a target="_new" href="AnotherLink"><img src="img/img2.gif" border="0"></a></td>
</tr>

这种结构重复了很多次,里面有不同的文本,但我只想提取这个集合,因为文本“STRING TO CAPTURE”第一次出现在这里。那么如何使用 Jsoup 只提取这个集合,以及它之间的可见文本,以及 url

AnotherLink

在文本“STRING TO CAPTURE”的行出现? 我是 Jsoup 的新手,所以我只尝试过这个

  Document doc = Jsoup.connect("http://www.website.com").get();

Element link = doc.select("a").first();
String relHref = link.attr("href"); 
String absHref = link.attr("abs:href"); 
String text = doc.body().text();
String linkHref = link.attr("href"); 
String linkText = link.text(); 

  System.out.println("link:" + link);
  System.out.println("text:" + text);

但是不能为此提前做,请给我一些建议!谢谢!

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

    使用这个测试输入:

    String test = "<html><body><table>";
    test += "<tr>";
    test += "<td width=\"10%\" bgcolor=\"#FFFFFF\"><font class=\"bodytext9\">1-Jun-2013</font></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=center><font class=\"bodytext9\">Sat</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\">Another Text</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\"><img src=\"img/colors/white.gif\"></font></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a class=\"black_9\" href=\"link2\">Here is also Text</a></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"LINKtoWeb\" class=list><u>TEXT THAT DOESN'T MATCH</u></a></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=\"center\"><a target=\"_new\" href=\"NotMatchLink\"><img src=\"img/img2.gif\" border=\"0\"></a></td>";
    test += "</tr>";
    test += "<tr>";
    test += "<td width=\"10%\" bgcolor=\"#FFFFFF\"><font class=\"bodytext9\">1-Jun-2013</font></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=center><font class=\"bodytext9\">Sat</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\">Another Text</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\"><img src=\"img/colors/white.gif\"></font></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a class=\"black_9\" href=\"link2\">Here is also Text</a></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"LINKtoWeb\" class=list><u>STRING TO CAPTURE</u></a></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=\"center\"><a target=\"_new\" href=\"AnotherLink\"><img src=\"img/img2.gif\" border=\"0\"></a></td>";
    test += "</tr>";
    test += "<tr>";
    test += "<td width=\"10%\" bgcolor=\"#FFFFFF\"><font class=\"bodytext9\">1-Jun-2013</font></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=center><font class=\"bodytext9\">Sat</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\">Another Text</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\"><img src=\"img/colors/white.gif\"></font></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a class=\"black_9\" href=\"link2\">Here is also Text</a></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"LINKtoWeb\" class=list><u>MORE TEXT THAT DOESN'T MATCH</u></a></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=\"center\"><a target=\"_new\" href=\"NotMatchLink\"><img src=\"img/img2.gif\" border=\"0\"></a></td>";
    test += "</tr>";
    test += "<tr>";
    test += "<td width=\"10%\" bgcolor=\"#FFFFFF\"><font class=\"bodytext9\">1-Jun-2013</font></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=center><font class=\"bodytext9\">Sat</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\">Another Text</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\"><img src=\"img/colors/white.gif\"></font></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a class=\"black_9\" href=\"link2\">Here is also Text</a></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"LINKtoWeb\" class=list><u>STILL MORE TEXT THAT DOESN'T MATCH</u></a></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=\"center\"><a target=\"_new\" href=\"NotMatchLink\"><img src=\"img/img2.gif\" border=\"0\"></a></td>";
    test += "</tr>";
    test += "</table></body></html>";
    test += "<td width=\"10%\" bgcolor=\"#FFFFFF\"><font class=\"bodytext9\">Second 1-Jun-2013</font></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=center><font class=\"bodytext9\">Second Sat</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\">Second Another Text</font></td>";
    test += "<td width=\"5%\" bgcolor=\"#FFFFFF\" align=\"center\"><font class=\"bodytext9\"><img src=\"img/colors/white.gif\"></font></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a class=\"black_9\" href=\"link2\">Second Here is also Text</a></td>";
    test += "<td width=\"15%\" bgcolor=\"#FFFFFF\" align=\"center\"><a href=\"LINKtoWeb\" class=list><u>STRING TO CAPTURE</u></a></td>";
    test += "<td width=\"4%\" bgcolor=\"#FFFFFF\" align=\"center\"><a target=\"_new\" href=\"SecondAnotherLink\"><img src=\"img/img2.gif\" border=\"0\"></a></td>";
    test += "</tr>";
    

    还有这段代码:

    final Document document = Jsoup.parse(test);
    final Element entireRow = document.select("tr:contains(STRING TO CAPTURE)").get(0);
    for (final Element column : entireRow.select("td")) {
        System.out.println("Column text is: " + column.text());
    }
    final Elements link = entireRow.select("td:contains(STRING TO CAPTURE) + td > a[href]");
    System.out.println("Target link is: " + link.attr("href"));
    

    它输出:

    Column text is: 1-Jun-2013
    Column text is: Sat
    Column text is: 
    Column text is: Another Text
    Column text is: 
    Column text is: Here is also Text
    Column text is: STRING TO CAPTURE
    Column text is: 
    Target link is: AnotherLink
    

    【讨论】:

    • 一开始我无法提取你上面输入的单个组进行测试!正如我所说,该结构在网络中重复了几次,所以我需要找到一种方法来提取包含“STRING TO CAPTURE”的第一组第一次从源代码的头到尾阅读;然后我需要分别提取每一行上的每个可见文本,还有一个是行中具有“STRING TO CAPTURE”的链接
    • 所以,按组是指tr,每行是指每个td吗?
    • 我已经根据我之前评论中的猜测更新了我的答案。
    • 差不多了,但问题是“STRING TO CAPTURE”也会在另一个结构中重复,所以使用它,它将从下面重复的所有结构中提取,我想得到第一个结构它只出现
    • 我进行了更改以仅获取第一个并更新了示例以进行演示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2019-07-13
    • 2012-04-28
    相关资源
    最近更新 更多