0

初めてセレクタ ガジェットを使用して問題が発生しました。以下のコードを実行すると、最初の結果しかターミナルに表示されないのはなぜですか?

また、サンプル ページの ICD-10 コードの後に​​テキストを取得する簡単な方法はありますか?

require 'rubygems'
require 'nokogiri'
require 'open-uri'

url = "http://en.wikipedia.org/wiki/ICD-10_Chapter_XVII:_Congenital_malformations,_deformations_and_chromosomal_abnormalities"
doc = Nokogiri::HTML(open(url))
puts doc.at_css("li li:nth-child(1) li a , li li ul:nth-child(5) :nth-child(1), .new, li:nth-child(3) li a, li li li:nth-child(10) li:nth-child(9) li:nth-child(4) :nth-child(1) li:nth-child(5) :nth-child(1) :nth-child(1) li:nth-child(2) :nth-child(1), li a:nth-child(4), li li li:nth-child(1), #mw-content-text li a:nth-child(5), li :nth-child(4) ul:nth-child(4) :nth-child(1), #mw-content-text li a:nth-child(3)").text
4

2 に答える 2

2

これは、Q コードで箇条書きに続くすべてのテキストを取得します。

puts doc.search('//li[contains(a[@class="external text"]/@href, "icd10")]').map(&:text)

XPathは、URL にli外部リンクを含むリスト アイテム ( ) と一致しicd10、そこからテキストを抽出します。

これは少し大雑把なブラシ ストロークです。すべてのテキストを取得します。つまり、コードが不要な場合、またはコードを持たないサブアイテムが必要な場合は、さらに操作が必要になります。しかし、いずれにせよ、それはスタートです。

于 2012-09-02T17:25:23.220 に答える
0

ここを参照してください:

http://nokogiri.org/Nokogiri/XML/Node.html#method-i-at_css

このノードでCSSルールの最初の出現を検索します。css(rules).firstと同等です。詳細については、Node#cssを参照してください。

したがって、すべてのテキストを表示したい場合は、次のことをお勧めします。

selectors = ["li li:nth-child(1) li a", "li li ul:nth-child(5) :nth-child(1)", ".new", "li:nth-child(3) li a", "li li li:nth-child(10) li:nth-child(9) li:nth-child(4) :nth-child(1) li:nth-child(5) :nth-child(1) :nth-child(1) li:nth-child(2) :nth-child(1)", "li a:nth-child(4)", "li li li:nth-child(1)", "#mw-content-text li a:nth-child(5)", "li :nth-child(4) ul:nth-child(4) :nth-child(1)", "#mw-content-text li a:nth-child(3)"]
selectors.each do |s|
  puts doc.at_css(s).text
end
于 2012-09-01T12:50:01.020 に答える