Techioz Blog

ノコギリレールで第 1 レベルの子を見つける

概要

現在の要素から最初のレベルの子をどのように見つけるかという問題に直面しました。 たとえば、私は html を持っています:

 <table>
   <tr>abc</tr>
   <tr>def</tr>   
   <table>
     <tr>second</tr>
   </table>
 </table>

レールには Nokogiri を使用しています。

table = page.css('table')
table.css('tr')

テーブル内のすべての tr を返します。 ただし、テーブルの最初のレベルは 2 つだけ必要です。

解決策

これを言うとき:

table = page.css('table')

最上位のテーブルだけではなく、両方のテーブルを取得することになります。したがって、ドキュメントルートに戻って、moschが言うように最初のテーブルの行のみに一致するセレクターを使用するか、次のようなものでテーブルを外側のテーブルのみに修正することができます。

table = page.css('table').first
trs   = table.xpath('./tr')

またはこれさえも (HTML の実際の構造に応じて):

table = page.xpath('/html/body/table')
trs   = table.xpath('./tr')

または、テーブル用に次のいずれかを使用することもできます (Phrogz に再度感謝します)。

table = page.at('table')
table = page.at_css('table')
# or various other CSS and XPath incantations