Ruby 在Nokogiri css选择器中指定图像宽度和/或高度的范围

Ruby 在Nokogiri css选择器中指定图像宽度和/或高度的范围,ruby,parsing,css-selectors,nokogiri,Ruby,Parsing,Css Selectors,Nokogiri,我想使用这个CSS选择器,但不是指定图像的确切宽度和高度,而是需要选择宽度和/或高度的最小值或最大值或范围。我正在使用Ruby中的Nokogiri宝石,有什么方法可以做到这一点吗 img = doc.css("img[@width = '#{width}'][@height = '#{height}']").collect{|e| e.attributes["src"].value} 例如宽度>200等等。我不能给你一个精确的解决方案,但我认为你应该可以在Nokogiri中使用 提供了最小/最

我想使用这个CSS选择器,但不是指定图像的确切宽度和高度,而是需要选择宽度和/或高度的最小值或最大值或范围。我正在使用Ruby中的Nokogiri宝石,有什么方法可以做到这一点吗

img = doc.css("img[@width = '#{width}'][@height = '#{height}']").collect{|e| e.attributes["src"].value}

例如宽度>200等等。

我不能给你一个精确的解决方案,但我认为你应该可以在Nokogiri中使用


提供了最小/最大函数。

我不能给您一个精确的解决方案,但我认为您应该能够在Nokogiri中使用


提供最小/最大功能。

我不确定self.body是什么,但您可以按宽度选择img,如下所示:

doc.css('img').select{|img| img[:width].to_i > 200}


我不确定self.body是关于什么的,但您可以按宽度选择img,如下所示:

doc.css('img').select{|img| img[:width].to_i > 200}

doc.xpath('//img[@height>=50和@height=50和@width
或


doc.xpath('//img[@height>=50和@height=50和@width已经提供的解决方案涉及使用css和Ruby过滤结果,或者使用xpath,您可以使用xpath函数过滤感兴趣的节点

使用Nokogiri还有另一种可能有用的技术,您可以定义自己的,然后在选择器中使用。例如,您可以定义一个
height\u大于
伪类,然后使用类似
img:height\u大于(200)
的选择器

为此,您可以定义一个(Ruby)类,其中包含要实现的伪(css)类的方法

class CustomPsuedoSelectors
  def height_greater_than(nodes, height)
    nodes.find_all {|n| n['height'].to_i > height}
  end
end
接下来,将此类的实例作为参数传递给对
css
的调用:

nodes = doc.css 'img:height_greater_than(200)', CustomPsuedoSelectors.new
对于单个查询来说,这样做可能不值得,但是如果您经常进行类似的选择,并且您更喜欢css语法而不是使用xpath,那么创建一些这样的自定义类可能是值得的


最后一件事,由于css倾向于使用连字符而不是下划线,您可能希望为您的方法创建别名,例如,在定义
高度大于
后添加
别名:“高度大于”高度大于
。然后您可以使用更自然的
img:height大于(200)
作为您的css选择器。(您也可以使用
define_method
)。

已经提供的解决方案包括使用css和Ruby过滤结果,或者使用xpath,您可以使用xpath函数过滤感兴趣的节点

使用Nokogiri还有另一种可能有用的技术,您可以定义自己的,然后在选择器中使用。例如,您可以定义一个
height\u大于
伪类,然后使用类似
img:height\u大于(200)
的选择器

为此,您可以定义一个(Ruby)类,其中包含要实现的伪(css)类的方法

class CustomPsuedoSelectors
  def height_greater_than(nodes, height)
    nodes.find_all {|n| n['height'].to_i > height}
  end
end
接下来,将此类的实例作为参数传递给对
css
的调用:

nodes = doc.css 'img:height_greater_than(200)', CustomPsuedoSelectors.new
对于单个查询来说,这样做可能不值得,但是如果您经常进行类似的选择,并且您更喜欢css语法而不是使用xpath,那么创建一些这样的自定义类可能是值得的


最后一件事,由于css倾向于使用连字符而不是下划线,您可能希望为您的方法创建别名,例如,在定义
高度大于
后添加
别名:“高度大于”高度大于
。然后您可以使用更自然的
img:height大于(200)
作为css选择器。(您也可以使用
定义方法
).

如果图像的宽度/高度属性丢失怎么办?我们仍然可以计算宽度/高度吗?@Bongs否,在这种情况下,您需要下载图像以确定尺寸。如果图像的宽度/高度属性丢失怎么办?我们仍然可以计算宽度/高度吗?@Bongs否,在这种情况下,您需要将图像下载到确定尺寸。