Ruby 鲁比·诺科吉。匹配动态属性名称
我正在尝试使用Nokogiri提取图像url。 下面的代码可以工作,但我希望以一种更高效、更可扩展的方式来做,而不是无限地做elsifRuby 鲁比·诺科吉。匹配动态属性名称,ruby,xpath,nokogiri,dry,Ruby,Xpath,Nokogiri,Dry,我正在尝试使用Nokogiri提取图像url。 下面的代码可以工作,但我希望以一种更高效、更可扩展的方式来做,而不是无限地做elsif if doc.at_css("img[itemprop='image']")['src'] img = doc.at_css("img[itemprop='image']")['src'] elsif doc.at_css("img[itemprop='image']")['data-src'] img = doc.at_css("img[ite
if doc.at_css("img[itemprop='image']")['src']
img = doc.at_css("img[itemprop='image']")['src']
elsif doc.at_css("img[itemprop='image']")['data-src']
img = doc.at_css("img[itemprop='image']")['data-src']
elsif doc.at_css("img[itemprop='image']")['data-react-src']
img = doc.at_css("img[itemprop='image']")['data-react-src']
...
我想学习两种方法:
'src' || 'data-src' || 'data-react-src
1) 普通Ruby方式:像迭代属性名一样,['src'、'data src'、'data react src'等…]
2) Nokogiri正则表达式或xpath,方法:
'src' || 'data-src' || 'data-react-src
像这样:
doc.at_css(“img[itemprop='image'])['src'| | |'data src'| |'data resact src]
更好的方法是将属性名称存储在变量中:
my_attributes = ['src' || 'data-src' || 'data-react-src]
doc.at_css("img[itemprop='image']").[my_attributes]
3) 如果有比以前更有效的方法,请尝试以下方法:
attributes = %w[src data-src data-react-src]
elem = doc.at_css("img[itemprop='image']")
attr = attributes.find { |attr| elem[attr] }
doc[attr] if attr
它的作用:
elem
保存元素(Nokogiri::XML::element
)。我们不想多次获取它以进行优化attr
保存元素响应的第一个属性。如果找到了src
,它将不会尝试在数据src
中查找,以此类推。这样我们优化了迭代李>
attr
ibute处的值李>
希望能有帮助