0

我正在解析来自网站的 HTML 文件,但在从文件中获取所有数据时遇到问题。

<tr>
<td class="color_line1" valign="center" align="left">Cemopel - Cm Petroleo Ltda.</td>
<td class="color_line1" valign="center" align="left">Avenida Rui Barbosa, 879 0</td>
<td class="color_line" valign="left"><a class="linkpadrao" href="javascript:Direciona('GRA%C3%87AS');">Gra###</a></td>
<td class="color_line" valign="center" align="center">SHELL</td>
<td class="color_line" valign="center" align="center">2,899</td>
<td class="color_line" valign="center" align="center"> - </td>
<td class="color_line" valign="center" align="center">-</td>
<td class="color_line" valign="center" align="center">-</td>
<td class="color_line" valign="center" align="center">04/09/2013</td>
</tr>

文件的另一部分:

<tr>
<td class="lincol" valign="center" align="left">E.u. Ten#### Neto Combust###is</td>
<td class="lincol" valign="center" align="left">Avenida Marechal Mascarenhas de Morais, 4900 </td>
<td valign="left"><a class="linkpadrao" href="javascript:Direciona('IMBIRIBEIRA');">Imbiribeira</a></td>
<td valign="center" align="center">COSAN COMBUST##EIS</td>
<td valign="center" align="center">2,899</td>
<td valign="center" align="center">2,505</td>
<td valign="center" align="center">CIF</td>
<td valign="center" align="center">-</td>
<td valign="center" align="center">04/09/2013</td>
</tr>
<tr>

我正在使用“linkpadrao”类,使用父母来获取数据。它工作正常,但我无法获得“linkpadrao”类以上的数据:

posto.parent.search('~ td').map &:text

有任何想法吗?

4

1 回答 1

1

在 css-selector~ td中,~是一个通用的兄弟选择器。不幸的是,兄弟选择器(一般和相邻)只选择节点之后的兄弟。这就是为什么你不能得到以前的 td 元素。Css 选择器没有前面的兄弟选择器。

由于您想要所有 td 元素,您可以再增加一个父元素到 tr 元素,然后获取所有 td 元素:

posto.parent.parent.search('td').map &:text
#=> E.u. Ten#### Neto Combust###is
#=> Avenida Marechal Mascarenhas de Morais, 4900 
#=> Imbiribeira
#=> COSAN COMBUST##EIS
#=> 2,899
#=> 2,505
#=> CIF
#=> -
#=> 04/09/2013

请注意,我假设posto是链接节点。

或者,您可以使用 xpath,它确实有一个前面的兄弟选择器。但是,在这种情况下,它看起来并不那么好:

posto.parent.xpath('./following-sibling::td|preceding-sibling::td').map &:text
于 2013-09-12T13:09:33.510 回答