【问题标题】:Jsoup select not returning all elementsJsoup select不返回所有元素
【发布时间】:2015-08-29 00:24:22
【问题描述】:

我是 Jsoup 库的新手。我有这样的html。

<tr class="srrowns"> 
 <td class="num"> <a name="y2015"> </a> 1 </td> 
 <td nowrap><a href="/cve/CVE-2015-4004/" title="CVE-2015-4004 security vulnerability details">CVE-2015-4004</a></td> 
 <td><a href="/cwe-details/119/cwe.html" title="CWE-119 - CWE definition">119</a></td> 
 <td class="num"> <b style="color:red"> </b> </td> 
 <td> DoS Overflow +Info </td> 
 <td>2015-06-07</td> 
 <td>2015-06-08</td> 
 <td>
  <div class="cvssbox" style="background-color:#ff8000">
   8.5
  </div></td> 
 <td align="center">None</td> 
 <td align="center">Remote</td> 
 <td align="center">Low</td> 
 <td align="center">Not required</td> 
 <td align="center">Partial</td> 
 <td align="center">None</td> 
 <td align="center">Complete</td> 
</tr>

当我运行element.select("td") 时,它正在返回

<td class="num"> <a name="y2015"> </a> 1 </td>
<td nowrap><a href="/cve/CVE-2015-4004/" title="CVE-2015-4004 security vulnerability details">CVE-2015-4004</a></td>
<td><a href="/cwe-details/119/cwe.html" title="CWE-119 - CWE definition">119</a></td>
<td class="num"> <b style="color:red"> </b> </td>
<td> DoS Overflow +Info </td>
<td>2015-06-07</td>
<td>2015-06-08</td>
<td>
 <div class="cvssbox" style="background-color:#ff8000">
  8.5
 </div></td>
<td align="center">None</td>
<td align="center">Remote</td>
<td align="center">Low</td>
<td align="center">Not required</td>
<td align="center">Partial</td>
<td align="center">Complete</td>

显然,删除“Complete”之前的&lt;td align="center"&gt;None&lt;/td&gt;。有什么方法可以从 Jsoup Selector 获取所有项目?

我的代码在 Scala 中看起来像这样。

val connection = Jsoup.connect(url).get() 
val treelist = connection.select("tr.srrowns:contains(CVE-2015-4001)")
val tree = tree.select("td") 

刚刚看到Jsoup select是使用LinkedHashSet实现的。我的目标是使用Jsoup.text()从每个标签中提取文本。是否有解决方法,或者我是否必须编写一个解析器来获取所有节点(包括重复节点)?

非常感谢。

【问题讨论】:

  • 你能发布更多你的代码吗?
  • 嗨,我刚刚添加了我写的代码。

标签: java scala web-scraping jsoup


【解决方案1】:

试试这个 CSS 选择器:

tr.srrowns:has(td:contains(CVE-2015-4004)) > td

演示

http://try.jsoup.org/~vAgiHQY6TIJ5MSUzR-m_Y1GD5_U

示例代码

var cve = "CVE-2015-4004";
val doc = Jsoup.connect(url).get() 
val tds = doc.select("tr.srrowns:has(td:contains(" + cve + ")) > td")

for( var td <- tds ){
   println( td.text() );
}

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2019-02-26
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多