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 匹配li包含 URL 中的外部链接的列表项 ( ) 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 回答