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()
时会得到什么?慢慢来,四处探索,确保你明白自己在做什么,这将帮助你避免陷入死胡同。希望有帮助 绝对正确,伙计,现在完全明白,让它工作!!非常感谢!