そのためのドキュメントやチュートリアルは見つかりませんでした。そのようなものはありますか?
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
上記のコードは、table
子が属性tbody
が「threadbits_forum_251」と等しい場所にあるid
をどこでも取得します。しかし、なぜ二重//
で始まるのですか?最後に/tr
があるのはなぜですか?詳細については、「 Ruby Nokogiri解析HTMLテーブルII 」を参照してください。
Nokogiriを使用してhref
、id
、alt
、src
などを抽出する方法を誰かに教えてもらえますか?
td[3]/div[1]/a/text()' <--- extracts text
どうすれば他のものを抽出できますか?
XPathチュートリアル を読む必要があるようです
_//table/tbody[@id="threadbits_forum_251"]/tr
_式の意味は次のとおりです。
//
_-XMLドキュメントの任意の場所table/tbody
_-tbodyの子を持つテーブル要素を取得します[@id="threadbits_forum_251"]
_-whereid属性は「threadbits_forum_251」に等しいtr
-tr
要素を取りますしたがって、基本的には、次のことを知っておく必要があります。
@
_で始まる[]
_括弧内に入る私がそのAPIを正しく理解している場合は、doc.xpath("td[3]/div[1]/a")["href"]
、または_td[3]/div[1]/a/@href
_要素が1つしかない場合は_<a>
_を使用できます。
あなたのXPathは正しいです、そしてあなたはあなた自身の質問の最初の部分に(ほとんど)答えましたようです:
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
「上のコードは私に何かを与えます テーブル テーブルのtr、anywhere、これは属性idがtbitbits_forum_251と等しいtbodyの子を持つ
//
は、次の要素がドキュメントのどこにでも出現できることを意味します。
最後の/tr
は、一致する要素のtr
ノードを取得することを意味します。
各属性を1つずつ抽出する必要はありません。 Nokogiriで4つすべての属性を含むノード全体を取得し、以下を使用して属性を取得します。
theNode['href']
theNode['src']
ここで、theNode
はNokogiri Node オブジェクトです。
編集:
申し訳ありませんが、これらのライブラリは使用していませんが、XPathの評価と解析はMechanizeによって行われていると思います。したがって、要素全体とその属性を一度に取得する方法は次のとおりです。
doc.xpath("td[3]/div[1]/a").each do |anchor|
puts anchor['href']
puts anchor['src']
...
end