我正在抓取一个包含许多表行的电子邮件,其中一些我想要排除。我确实需要的表格行完全,如:
<tr>
<td class="quantity"> ANYTHING BUT EMPTY </td>
<td class="description"> ANYTHING BUT EMPTY </td>
<td class="price"> ANYTHING BUT EMPTY </td>
</tr>
没有表行具有类或ID。此外,有些不需要的<table>
行包含具有这些类的单元格但有些没有值,因此我只需要获得具有这三类单元格的表行,以及所有三个具有非空值的单元格。我不确定这样做的语法:
body = Nokogiri::HTML(email)
wanted_rows = body.css('tr').select{ NOT SURE HOW TO ENCAPSULATE LOGIC HERE }
答案 0 :(得分:1)
这对XPath来说相当简单:
wanted_rows = body.xpath('//tr[td[(@class = "quantity") and normalize-space()]
and td[(@class = "description") and normalize-space()]
and td[(@class = "price") and normalize-space()]]')
normalize-space()
调用实际上与normalize-space(.) != ""
相同,即他们检查当前节点(td
)是否包含除空白之外的其他内容。