作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我刚开始使用 nokogiri 从网站上抓取信息,但不知道如何完成以下工作。我有一些要抓取的 HTML 代码:
<div class="compatible_vehicles">
<div class="heading">
<h3>Compatible Vehicles</h3>
</div><!-- .heading -->
<ul>
<li>
<p class="label">Type1</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type2</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type3</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type4</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type5</p>
<p class="data">All</p>
</li>
</ul>
</div><!-- .compatible_vehicles -->
我已经设法在我的屏幕上得到了我想要的输出:
i = 0
doc.css('div > .compatible_vehicles > ul > li').each do |item|
label = item.at_css(".label").text
data = item.at_css(".data").text
print "#{label} - #{data}" + ','
end
i += 1
这给了我一个这样的列表:Type1 - All,Type2 - All,Type3 - All,Type4 - All,Type5 - All,在屏幕上。
现在我想在一个数组中获取这个值,以便能够将它保存到 CSV 文件中。我尝试了一些东西,但大多数尝试都出现“无法将字符串转换为数组”错误。希望有人能帮我解决这个问题!
最佳答案
从 HTML 开始:
html = '
<div class="compatible_vehicles">
<div class="heading">
<h3>Compatible Vehicles</h3>
</div><!-- .heading -->
<ul>
<li>
<p class="label">Type1</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type2</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type3</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type4</p>
<p class="data">All</p>
</li>
<li>
<p class="label">Type5</p>
<p class="data">All</p>
</li>
</ul>
</div><!-- .compatible_vehicles -->
'
用 Nokogiri 解析它并遍历 <li>
标签来获取他们的 <p>
标签内容:
require 'nokogiri'
doc = Nokogiri::HTML(html)
data = doc.search('.compatible_vehicles li').map{ |li|
li.search('p').map { |p| p.text }
}
返回数组的数组:
=> [["Type1", "All"], ["Type2", "All"], ["Type3", "All"], ["Type4", "All"], ["Type5", "All"]]
从那里您应该能够将其插入到 CSV 类的示例中并使其正常工作。
现在,将您的代码与输出到屏幕的字段与此进行比较:
data.map{ |a| a.join(' - ') }.join(', ')
=> "Type1 - All, Type2 - All, Type3 - All, Type4 - All, Type5 - All"
我所要做的就是 puts
并且它会正确打印。
考虑返回有用的数据结构非常重要。在 Ruby 中,散列和数组非常有用,因为我们可以遍历它们并将它们按摩成多种形式。从数组的数组中创建哈希是微不足道的:
Hash[data]
=> {"Type1"=>"All", "Type2"=>"All", "Type3"=>"All", "Type4"=>"All", "Type5"=>"All"}
这将使查找变得非常容易。
关于ruby - 使用 Nokogiri::HTML 和 Ruby 进行网页抓取 - 如何将输出输出到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661125/
我是一名优秀的程序员,十分优秀!