2016-04-30 69 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

相关问题