使用Nokogiri获取属性href = a,b或c的所有锚点

时间:2013-10-08 20:53:31

标签: ruby nokogiri

我想找到所有href属性等于'a','b'或'c'的锚元素

到目前为止,我所做的是:

values = ['a','b','c']
anchors = page.css('a')

anchors.each do |anchor|
  if values.include? anchor.attribute('href').value
    p "found it"
  end
end

有什么方法可以直接选择那些锚点而不必在以后通过它们?

2 个答案:

答案 0 :(得分:2)

CSS允许我们请求多个不同的选择器:

require 'nokogiri'

html = <<EOT
<html>
  <body>
    <a href="a">a link</a>
    <a href="x">x link</a>
    <a href="b">b link</a>
    <a href="y">y link</a>
    <a href="c">c link</a>
  </body>  
</html>
EOT

doc = Nokogiri::HTML(html)
doc.search('*[href="a"], *[href="b"], *[href="c"]').each { |n| p n.to_html }

运行该返回:

"<a href=\"a\">a link</a>"
"<a href=\"b\">b link</a>"
"<a href=\"c\">c link</a>"

答案 1 :(得分:0)

使用Nokogiri,您始终可以使用xpath:

<!doctype html>
<html lang="en">
<head></head>
<body>
  This is <a href="http://b.com">a link</a>
  This is <a href="http://a.com">another link</a>
</body>
</html>


noko_page.xpath("//a[@href='http://a.com' or @href= 'http://b.com']")



=> [#<Nokogiri::XML::Element:0x3fc9360be368 name="a" attributes=[#<Nokogiri::XML::Attr:0x3fc9360bdcd8 name="href" value="http://b.com">] children=[#<Nokogiri::XML::Text:0x3fc93618e93c "a link">]>, #<Nokogiri::XML::Element:0x3fc93618dc08 name="a" attributes=[#<Nokogiri::XML::Attr:0x3fc93618d71c name="href" value="http://a.com">] children=[#<Nokogiri::XML::Text:0x3fc93618fd78 "another link">]>]