gpt4 book ai didi

css - 如何从 ruby​​ 中的这个标签中抓取字符串

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:02 25 4
gpt4 key购买 nike

我目前正在尝试在 Codecademy/Baserails 之外做我的第一个合适的元素,并且可以使用一些指导。我正在使用爬虫作为 Baserails 元素之一的一部分作为工作的基础。我的目标是获取字符串“Palms Trax”并将其存储在名为 DJ 的数组中。我还希望获取字符串“Solid Steel Radio Show”并将其存储在名为 source 的数组中。我的计划是将细节部分的所有行提取到一个子数组中,然后将其过滤到 DJ 和源数组中,但如果有更好的方法,请告诉我。我一直在尝试各种不同的组合,例如“.details none.li.div”、“ul details none.li.div.a”等,但似乎无法找到正确的组合。也有人可以向我解释为什么代码

page.css('ol').each do |line|
subarray = line.text.strip.split(" - ")
end

仅当我较早地在循环外声明子数组时才有效,因为在我正在处理的 Baserails 元素中似乎并非如此。

这里是相关的html:

    <!-- Infos -->
<ul class="details none">
<li><span>Source</span><div> <a href="http://solidsteel.ninjatune.net/" target="_blank">Solid Steel Radio Show</a></div></li>
<li><span>Date</span><div>2015.02.27</div></li>
<li><span>Artist</span><div><a href="http://www.electronic-battle-weapons.com/mix-artist/palms-trax/" rel="tag">Palms Trax</a></div></li>
<li><span>Genres</span><div><a href="http://www.electronic-battle-weapons.com/mix-genre/deep-house/" rel="tag">Deep House</a><a href="http://www.electronic-battle-weapons.com/mix-genre/experimental/" rel="tag">Experimental</a><a href="http://www.electronic-battle-weapons.com/mix-genre/house/" rel="tag">House</a><a href="http://www.electronic-battle-weapons.com/mix-genre/minimal/" rel="tag">Minimal</a><a href="http://www.electronic-battle-weapons.com/mix-genre/techno/" rel="tag">Techno</a></div></li>
<li><span>Categories</span><div><a href="http://www.electronic-battle-weapons.com/releases-category/radio-shows/" rel="tag">Radio Shows</a><a href="http://www.electronic-battle-weapons.com/releases-category/solid-steel-radio-show/" rel="tag">Solid Steel Radio Show</a></div></li>
<li><span>File Size</span><div> 135 MB</div></li>
<li><span>File Format</span><div> MP3 Stereo 44kHz 320Kbps</div></li>
</ul>

到目前为止我的代码:

 require "open-uri"
require "nokogiri"
require "csv"

#store url to be scraped
url = "http://www.electronic-battle-weapons.com/mix/solid-steel-palms-trax/"

#parse the page

page = Nokogiri::HTML(open(url))

#initalize empty arrays
details = []
dj = []
source = []
artist = []
track = []
subarray =[]
#store data in arrays


page.css('ul details none.li.div').each do |line|

details = line.text.strip
end
puts details

page.css('ol').each do |line|
subarray = line.text.strip.split(" - ")

end

最佳答案

我是 Alex,BaseRails 的联合创始人之一。很高兴您现在开始从事自己​​的元素 - 这是开始应用所学知识的最佳方式。我想我会凑钱看看能不能帮上忙。

我会试试这个:

page.css(ul.details.none li div a)

这将抓取每个 <a>标签,你就可以使用 .text提取链接的文本(例如 Solid Steel Radio Show、Palms Trax 等)。要理解上面的代码,请记住 .表示“有一个名为...的类”,空格表示“其中嵌套了以下内容”。

所以在英语中,“ul.details.none li div a”被翻译成“一个 <ul> 标签,其中包含一个名为“details”的类和另一个名为“none”的类,其中嵌套了一个 <li> 标签,其中嵌套了一个 <div> 标签,其中嵌套了一个 <a> 标签。尝试一下,看看您是否可以弄清楚如何将结果过滤为 DJ、源等。

最后,我不确定为什么你的 subarray需要申报。如果这是您使用它的唯一上下文,则不需要声明它。仅供引用,我们不需要在 BaseRails 类(class)中声明它的原因是因为 .split函数默认返回一个数组。这不像我们的 name , price , 和 details我们使用不同函数的数组 ( << )。 <<函数可以在多种上下文中使用,因此我们必须清楚地表明我们正在使用它来向数组添加元素。

希望对您有所帮助!

关于css - 如何从 ruby​​ 中的这个标签中抓取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com