2012-08-10 45 views
1

我試圖從包含.value.rating-ineligible類的網站中刮取數據。什麼是追蹤元素髮生的最佳方式,並在Ruby中使用Nokogiri設置相應的數組

我希望跟蹤這兩個.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) 

我想這些在一個被捕獲單個陣列,

其中值應該設置爲「A」如果一個有效的評級是存在於格式x.x中

的值應該被設置爲「NA」如果存在於輸入端的值是NYR

「 - 」如果在輸入中存在連字符符號-

所需的輸出:

標誌[ 「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(/.../)  

和陣列拉提像下面[]長相的輸出,

拉提[「8.7」​​,「5.2」 ,「6.1」,「7.9」,「NOE」,「4.2」]

但這裏的問題是, 有本完全8個值中的給定輸入, 這超過了5個值在XX 一個值的格式是在的格式 - 其被捕獲作爲NOE「」在陣列 但我無法捕獲該陣列中的NYR。

上面輸入的所需輸出應該如下所示: rati [「8.7」​​,「NYR」,「5.2」,「6.1」,「7.9」,「NYR」,「NOE」,「4。2" ] ,但我不知道確切的方式,如何捕捉NYR值到數組。

誰能給我正確的代碼來做到這一點?在此先

感謝。

+2

請提供示例輸入和所需輸出 – Phrogz 2012-08-10 13:20:00

+0

此外,請顯示您嘗試編寫的一些示例代碼,以表明您已嘗試解決該問題。 – 2012-08-10 20:16:21

回答

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"] 
相關問題