0

私はこれをhtmlで持っています:

<meta name='DC.creator' scheme='inventor' content='Chen Yonghong' />
<meta name='DC.creator' scheme='inventor' content='Chen Yuan' />

最初の作成者を取得したい場合は、次のようにできます。

:author =>  page.at('meta[@name="DC.creator"]')[:content]

問題は、機械化セレクターを使用して 2 番目のものを取得するにはどうすればよいかということです。

4

1 に答える 1

2

以下を使用できます。

page.search('meta[@name="DC.creator"]')[1][:content]

at同じsearch(...).firstセレクターを検索で使用し、見つかった 2 番目の要素を取得することは、一致するタグが本当に 2 つある限り機能します。そうでない場合は、nil 値のインデックスを取得できないため、例外が発生します。

また、参考までに、Mechanize は内部でNokogiriを使用して HTML の解析と操作を処理します。Nokogiri は CSS セレクターと XPath セレクターの両方をサポートしているため、必要なタグまたは要素を見つけやすい方を使用できます。私は読みやすさのために CSS に傾倒していますが、両方を使用しています。検索の詳細については、ノコギリのチュートリアルを参照してください。

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<meta name='DC.creator' scheme='inventor' content='Chen Yonghong' />
<meta name='DC.creator' scheme='inventor' content='Chen Yuan' />
EOT

doc.search('meta[@name="DC.creator"]')[1][:content]
=> "Chen Yuan"
于 2013-06-19T06:40:39.350 に答える