1

我正在尝试从一个同时包含.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>

如果您看到上述示例输入,则存在三种类型的值,

一是评分:*.*
第二个是:NYR
第三个是:-(连字符)

我希望这些被捕获在一个数组中,

如果以xx格式存在有效评级,则该值应设置为“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(/.../)    

数组 ratio[] 的输出如下所示,

比率 ["8.7","5.2","6.1","7.9","NOE","4.2"]

但这里的问题是,给定输入中共有 8 个值,其中 5 个值的格式为 xx 一个值的格式为“-”,在数组中被捕获为 NOE 但我无法在该阵列中捕获 NYR。

现在上述输入的期望输出应该是这样的,比率 ["8.7","NYR","5.2","6.1","7.9","NYR","NOE","4.2"] 但我不知道确切的方法,如何将 NYR 值捕获到数组中。

谁能给我正确的代码来做到这一点?

提前致谢。

4

1 回答 1

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"]
于 2013-11-03T05:42:04.763 回答