用Jsoup获取第二个td元素

时间:2018-04-02 23:05:03

标签: java html5 jsoup

我正在尝试从网页中获取多个元素。为此,我决定使用Jsoup。下图显示了我想要提取的部分html部分:

enter image description here

我需要获得标有红色的元素。我可以得到的第一个名字:

String url = "";
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("td.DifFlSb");
for(Element x:links){
   System.out.println(x.getElementsByTag("a").first().text());
}

我的问题是我不知道如何在第二个td中提取数据。我尝试使用正则表达式,但没有。 td没有类或ID,所以我不知道如何制作它。

3 个答案:

答案 0 :(得分:0)

您可能想要使用Elements secondTds = doc.select("tr td+td");

这将定位第二个td。这是有效的,因为select方法接受cssQuery格式。

示例:

tr td+td {color: red;}
<table>
<tr>
<td>Content td 1</td>
<td>Content td 2</td>
</tr>
<tr>
<td>Content td 1</td>
<td>Content td 2</td>
</tr>
</table>

答案 1 :(得分:0)

您可以使用Jsoup和一些Java轻松解决这个问题。

Elements trs = doc.select("tr");
for (Element tr : trs){
  Elements tds = tr.select("td");
  if (tds && tds.size() > 0){
    Element secondTd = tds.get(1);
    //do whatever you need to do with td 
  }
}

请注意,我的上述代码未经测试。我没有Java环境,因此只需在Stackoverflow的答案框中输入。

BTW:您应该始终将代码和HTML直接放在您的问题中。还要进入CSS,这是熟悉使用JSoup进行抓取时的工具。

答案 2 :(得分:0)

您可以使用以下代码选择a标记的父元素的第一个兄弟:

for(Element x:links){
    System.out.println(x.getElementsByTag("a").first().text());
    System.out.println(x.getElementsByTag("a").first().parent().siblingElements().first().text());
}