使用选择器小工具显示所有结果&引入nokogiri?

时间:2012-09-01 12:38:24

标签: ruby nokogiri

我第一次使用选择器小工具并且遇到问题,当我运行下面的代码时,为什么我只能在终端中显示第一个结果?

此外,是否有更简单的方法来获取示例页面中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

2 个答案:

答案 0 :(得分:2)

这会获得带有Q代码的子弹后的所有文本:

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

XPath匹配一个列表项(li),其中包含URL中带有icd10的外部链接,然后从中提取文本。

这是一个广泛的笔触:它得到所有文本,这意味着如果你不想要代码或没有代码的子项,则需要进一步操作。但无论如何,这都是一个开始。

答案 1 :(得分:0)

见这里:

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

  

在此节点中搜索第一次出现的CSS规则。相当于css(规则)。首先参见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