Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 刮削轨迹表_Ruby_Arrays_Regex_Web Scraping - Fatal编程技术网

Ruby 刮削轨迹表

Ruby 刮削轨迹表,ruby,arrays,regex,web-scraping,Ruby,Arrays,Regex,Web Scraping,我正试着从一张唱片上抓取一张曲目表。我的相关代码是: page.css('ol').each do |line| subarray = line.text.strip.split(" - ") end 这使得数组将第一个艺术家放入第一个索引(如我所愿),但将曲目和曲目2的艺术家添加到第二个索引中,如下所示: subarray[0] = Rick Wilhite subarray[1] = Magic Water [Still Music] Edward subarray[2] = Into

我正试着从一张唱片上抓取一张曲目表。我的相关代码是:

page.css('ol').each do |line|
  subarray = line.text.strip.split(" - ")
end
这使得数组将第一个艺术家放入第一个索引(如我所愿),但将曲目和曲目2的艺术家添加到第二个索引中,如下所示:

subarray[0] = Rick Wilhite
subarray[1] = Magic Water [Still Music]
Edward
subarray[2] = Into A Better Future [Giegling]
Kassem Mosse
subarray[3] = Zolarem [Mikrodisko Recordings]
After Hours
  <li>Rick Wilhite...</li>
  <li>Edward...</li>
  ...
  <li>Klara Lewis...</li>
我包含了嵌套标记,因此我的代码如下所示:

page.css('ol li').each do |line|
  subarray = line.text.strip.split(" - ")
end
但这似乎只剩下
子阵列[0]
显示
“Klara Lewis”
子阵列[1]
显示
“Shine[Editions Mego]”
,这是曲目列表上的最后一首曲目。所有其他索引值均为空

更复杂的是,我想从最终成为曲目值的内容中删除唱片标签。我相信正确的正则表达式是
\[\d\d]*?\]
,但我的印象是,在数据进入数组之前需要应用正则表达式,以避免在数组上迭代所涉及的复杂性。我尝试将其作为第二个分隔符传递给拆分(以及
'-'
),但该分隔符不起作用,我还尝试将代码更改为:

page.css('ol').each do |line|
  subarray = line.text.strip.split("\[[\d\D]*?\]")
end

但这似乎也不起作用。有人能在这方面帮助我或给我正确的建议吗?

以下是发生的情况:

page.css('ol')
为您提供整个
以及每个
  • 标记:

    <ol>
      <li>Rick Wilhite...</li>
      <li>Edward...</li>
      ...
      <li>Klara Lewis...</li>
    </ol>
    
    这一次,您将在循环中运行17次,每个
  • 标记运行一次。第一次通过,
    .split(“-”
    应用于文本并存储在
    子数组
    变量中。问题是下次通过循环时,
    子数组
    被第二个
  • 的拆分文本覆盖。因此,在最后一次遍历之后,
    子数组
    变量的唯一内容是最终
  • 的拆分文本:“Klara Lewis”和“Shine[Editions Mego]”


    我认为您已经大致了解了如何从网站上抓取内容,但我建议您以更渐进的方式构建脚本,这样您就可以准确地了解每一步的操作。例如,使用
    put
    检查
    page.css('ol')
    提供了什么,以及它与
    page.css('ol li')
    的区别。当它通过一个循环时会发生什么?应用
    .split()
    时会得到什么?慢慢来,四处探索,确保你明白自己在做什么,这将帮助你避免陷入死胡同。希望有帮助

    绝对正确,伙计,现在完全明白,让它工作!!非常感谢!