我正在尝试从包含.value
和.rating-ineligible
类混合的网站中抓取数据。
我希望在单个数组中跟踪.value
和.rating-ineligible
,以检查.value
是否可用:
page.css('td.title .value').text.strip
page.css('.rating-ineligible').text.strip
我想要一个名为FLAG[]
的数组,当"A"
存在时元素设置为.value
,"NA"
存在.rating-ineligible
输出应该类似于:
FLAG["A","A","A","NA","A","NA","A","A"]
是否存在使FLAG
数组有效的黑客攻击?
示例输入:
<td class=title>
<span class="rating-rating">
<span class="value">8.7</span>
</span>
<div class="rating-ineligible">
<a href="somelink">NYR</a>
</div>
<span class="rating-rating">
<span class="value">5.2</span>
</span>
<span class="rating-rating">
<span class="value">6.1</span>
</span>
<span class="rating-rating">
<span class="value">7.9</span>
</span>
<div class="rating-ineligible">
<a href="somelink">NYR</a>
</div>
<span class="rating-rating">
<span class="value">-</span>
</span>
<span class="rating-rating">
<span class="value">4.2</span>
</span>
</td>
如果您看到上面的样本输入,则存在三种类型的值,
One is rating : *.* Second is : NYR Third one is : - (Hyphen)
我希望将它们捕获在一个数组中,
如果 x.x
格式中存在有效评级,则应将值设置为“A”如果输入中存在的值为 NYR ,则该值应设置为“NA”。
如果输入中存在连字符 - ,则和“ - ”。
期望输出:
标志[“A”,“NA”,“A”,“A”,“A”,“NA”,“ - ”,“A”]
不是设置标志而是通过将值捕获到下面的数组中来消除它,
r = page.css('td.title span.value').text.strip
noe=["NOE"]
ra=r.scan(/./)
ra.map!{|x| x=='-'?noe:x}.flatten!
rat=ra.join("")
rati=rat.scan(/.../)
数组rati []的输出如下所示,
rati [“8.7”,“5.2”,“6.1”,“7.9”,“NOE”,“4.2”]
但这里的问题是, 给定输入中总共有8个值, 其中5个值的格式为x.x. 一个值的格式为' - ',在数组中捕获为NOE 但我无法在该阵列中捕获NYR。
现在所需的输出输出应如下所示, rati [“8.7”,“NYR”,“5.2”,“6.1”,“7.9”,“NYR”,“NOE”,“4.2”] 但我不知道确切的方法,如何将NYR值捕获到阵列中。
任何人都可以使用正确的代码来执行此操作吗?
提前致谢。
答案 0 :(得分:1)
doc = Nokogiri::HTML(DATA.read)
result = doc.search("//td/*[starts-with(@class, 'rating-')]").map do |node|
case node.elements.first.text
when /\d+\.\d+/
'A'
when 'NYR'
'NA'
when '-'
'-'
end
end
pp result # ["A", "NA", "A", "A", "A", "NA", "-", "A"]