我试图从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
答案 0 :(得分:0)
是的,Nokogiri已经规定您可以创建自己的css
,xpath
,at
,at_css
,at_xpath
或node.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::Node和Nokogiri::XML::Searchable文档中。例如:
也可以定义自定义XPath函数和CSS伪选择器。要定义自定义函数,请创建一个类并实现要定义的函数。该方法的第一个参数将是当前匹配的NodeSet。任何其他参数都是您传入的参数。请注意,此类可能出现在参数列表中的任何位置。例如:
break