Nokogiri获取属性匹配模式的元素

时间:2016-05-04 16:13:07

标签: ruby parsing nokogiri screen-scraping

我试图从HTML中猜测价格。

如果#id或.class或直接父级具有属性值,例如某些正则表达式=〜[price。* | prdown | proff] +

1)Nokogiri doc.css是否接受像jsoup Java库那样的正则表达式?即[attr~ = regex] https://jsoup.org/apidocs/org/jsoup/select/Selector.html

2)我可以完成那个传递正则表达式作为属性值的参数吗?而不是创建自定义函数?

doc = Nokogiri::HTML(open(url).read)

  def get_price(doc)
    if doc.at_css("meta[itemprop='price']")
      price = doc.css("meta[itemprop='price']").first.attributes["content"]
    elsif doc.at_css('.price')
      price = doc.at_css('[class~=price]').text
    else
     price = ''
    end
    /([\d|\.|\$]+)/.match(price)[1].gsub(/[\.|\$]+/, '')
  end

1 个答案:

答案 0 :(得分:0)

是的,Nokogiri已经规定您可以创建自己的cssxpathatat_cssat_xpathnode.search('.//title[regex(., "\w+")]', 'div.employee:regex("[0-9]+")' Class.new { def regex node_set, regex node_set.find_all { |node| node['some_attribute'] =~ /#{regex}/ } end }.new ) 个功能

它位于Nokogiri::XML::NodeNokogiri::XML::Searchable文档中。例如:

  

也可以定义自定义XPath函数和CSS伪选择器。要定义自定义函数,请创建一个类并实现要定义的函数。该方法的第一个参数将是当前匹配的NodeSet。任何其他参数都是您传入的参数。请注意,此类可能出现在参数列表中的任何位置。例如:

break