我正在从网站解析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
有什么想法吗?
答案 0 :(得分: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