2016-04-30 68 views
-2

我很難弄清楚如何分割下面的數組並將其轉換爲格式,因此我可以構建一個Active Record的哈希數組。如何分割字符串數組並將其轉換爲散列數

我的問題源於編寫一個依靠Nokogiri從網上抓取信息的應用程序。我試圖提取的表中每一行的數據都被卡在一個單一的<td>元素中。每行只有一個<td>元素。

編輯: 第一個網頁包含幾百項<ul>列表和詳細資料頁面的鏈接。我遍歷每個項目,使用鏈接訪問詳細信息頁面進行解析。我在下面解析的表格元素來自詳細信息頁面。如果你看split_array的輸出,我給出第一行(第1級)的完整數據,然後是第二行(第2級)的一部分,以顯示它在結構上是相同的,但是沒有價值。解決第一行的問題,解決了所有6行的問題。

<td> 
    Level 1 
    <br> 
    Attribute A: 24% 
    <br> 
    Attribute B: 14% 
    <br> 
    Attribute C: 15.5% 
</td> 

我設法以數組的形式獲取以下格式的數據。

row.xpath('tr').each_with_index do |td, j| 
    split_array << td.text.squish.split('%') 
end 

這裏是split_array的部分輸出:我用下面的代碼分裂一長串這樣做

[["Level: 1 Attribute A: 24", "Attribute B: 14", "Attribute C: 15.5"],["Level: 2 Atribute A: 36", ..etc]..etc] 

我需要:

  1. 擺脫Level: 1的,Level: 2 ...來自每個陣列中的第一個元素
  2. 拆分Attribute Name和th Ë浮點值到自己的領域
  3. 轉換的部分成散列的數組,看起來與此類似:

    [{:statistic => "Attribute A", :level_1 => 24.0, :level_2 =>36},{:statistic => "Attribute B", :level_1 => 14.0,:level_2 => 24},{:statistic => "Attribute C", :level_1 => 15.5, :level_2 => 34}] 
    

我所要求的代碼,僞代碼,或想法,將發我在正確的方向將我的數組數組轉換爲我上面概述的散列數組。

+0

請閱讀「[mcve]」。我沒有看到示例HTML中的「Level:2」。請確保您的輸入數據符合您的代碼和說明;我們無法擺脫那些不存在的東西。 –

+0

如果您滾動瀏覽,我只展示了級別2的一部分,僅用於說明它在結構上相同但沒有價值。我編輯了我的問題來進一步解釋。 – ctilley79

回答

0

1)我不建議將<td>字符串用不同類型的信息進行解析並解析它們,而是建議將它們存儲在有意義的變量中。例如,將級別存儲在1個變量中,並將屬性統計數組存儲在另一個變量中,並使用Nokogiri提供的解析工具來獲取它們。

2)關於這些字符串:

"Attribute B: 14" 

下面是一個包含和示出了將解析它們的方法的腳本:關於數據的重新組織

#!/usr/bin/env ruby 

def parse_attr_string(s) 
    a = s.split 
    name = a[1].gsub(':', '') 
    value = a[2].gsub('%', '').to_f 
    [name, value] 
end 

s = "Attribute B: 14" 

name, value = parse_attr_string(s) 

puts "Name: #{name}, Value: #{value}" # Name: B, Value: 14.0 

3),如何關於嘗試弄清楚並用僞代碼表達出來,然後張貼你提出的問題,如果你有任何問題呢?

+0

謝謝你的回答!我會看到我能從中得到什麼,如果我還有其他問題,我會在這裏回覆 – ctilley79

相關問題