ruby - 如何使用 Nokogiri 获取 div 中的所有内容?

标签 ruby nokogiri

我正在使用 Nokogiri 来抓取一个看起来像这样的网站:

<div class="BOX">
  <div class="apple">This is an apple.</div>
  <p>Apple a day, doctor away</p>
</div>

<div class="BOX">
  <div class="iphone">This is an iPhone.</div>
  <div class="android">This is an Android.</div>
  <a href="www.apple.com">Apple home page</a>
  <p>Snoop Lion has both. He's rich.</p>
</div>

我想抓取“BOX”div 中的所有内容。每个“BOX”都有自己独特的 div 和 HTML 标签,没有明显的模式。我该怎么做?

我的第一次尝试是这样的:

require 'uri-open'
require 'nokogiri'

doc = Nokogiri::HTML(open('http://www.examplesite.com'))
doc.css('BOX').each do |box|
  puts box.content
end

但它什么也没有返回。我可以解释一下发生了什么吗?

最佳答案

我认为你应该使用 #inner_html方法而不是 #content。虽然你的 CSS class selector规则是错误的。代码应如下所示:

require 'nokogiri'

doc = Nokogiri::HTML::Document.parse <<-eot
<div class="BOX">
  <div class="apple">This is an apple.</div>
  <p>Apple a day, doctor away</p>
</div>

<div class="BOX">
  <div class="iphone">This is an iPhone.</div>
  <div class="android">This is an Android.</div>
  <a href="www.apple.com">Apple home page</a>
  <p>Snoop Lion has both. Hes rich.</p>
</div>
eot

doc.css('.BOX').each do|n|
   p n.inner_html
end

输出:

  <div class="apple">This is an apple.</div>
  <p>Apple a day, doctor away</p>

  <div class="iphone">This is an iPhone.</div>
  <div class="android">This is an Android.</div>
  <a href="www.apple.com">Apple home page</a>
  <p>Snoop Lion has both. He's rich.</p>

#content将通过删除每个 div 节点内的 html 包装器来为您提供所有文本。见下文:

doc.css('.BOX').each do|n|
   puts n.content
end

输出:

  This is an apple.
  Apple a day, doctor away

  This is an iPhone.
  This is an Android.
  Apple home page
  Snoop Lion has both. He's rich.

关于ruby - 如何使用 Nokogiri 获取 div 中的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19184974/

相关文章:

ruby - 如何使用 ruby​​ Mechanize gem 抓取需要先登录的网站

ruby-on-rails - 使用 ruby​​ 在浏览器中显示 docx 或 ppt

Ruby:选择一组数组索引,其元素通过测试

ruby-on-rails - 使用paypal-ruby-sdk创建Paypal定期订阅计划时如何让卖家支付交易费用

ruby - 使用 Ruby Mechanize 跟踪帖子表单重定向

ruby - 如何搜索和替换 Nokogiri 节点?

ruby - XPATH 索引不同?

ruby - DBI::OperationalError:无法连接到服务器:连接被拒绝

ruby - 如何用 YARD 记录一个不返回任何内容的方法

ruby - 当使用 Javascript 加载内容时,如何使用 Nokogiri 解析页面?