【问题标题】:Nokogiri html parsing questionNokogiri html parsing question
【发布时间】:2011-03-27 09:56:57
【问题描述】:

我无法弄清楚为什么我无法通过 nokogiri 正确解析关键字。在以下示例中,我的 a href 链接文本功能正常工作,但无法弄清楚如何提取关键字。

这是我到目前为止的代码:

.....

doc = Nokogiri::HTML(open("http://www.cnn.com"))
doc.xpath('//a/@href').each do |node|
#doc.xpath("//meta[@name='Keywords']").each do |node|

puts node.text

....

这成功地呈现了页面中的所有 a href 文本,但是当我尝试将它用于关键字时,它没有显示任何内容。我已经尝试了几种变体,但没有运气。我认为节点后的“.text”标注是错误的,但我不确定。

我很抱歉这段代码有多粗糙,我正在尽我所能在这里学习。

【问题讨论】:

  • 请阅读“minimal reproducible example”。说明问题的最小输入是多少?不要要求我们创造我们自己的。你必须帮助我们帮助你。通过这样做,您可以帮助那些在未来寻找类似解决方案的人,这就是 Stack Overflow 出现在这里的原因。

标签: ruby nokogiri


【解决方案1】:

你是对的,问题是texttext 返回开始标签和结束标签之间的文本。由于元标签是空的,这会给你空字符串。您需要“内容”属性的值。

doc.xpath("//meta[@name='Keywords']/@content").each do |attr|
  puts attr.value
end

由于您知道只有一个名为“关键字”的元标记,因此您实际上不需要循环遍历结果,而是可以像这样直接取第一项:

puts doc.xpath("//meta[@name='Keywords']/@content").first.value

但是请注意,如果没有名为“content”的元标记,这将导致错误,因此第一个选项可能更可取。

【讨论】:

  • 谢谢!!我一直在寻找很长一段时间,看看在哪里可以找到这些定义。你能告诉我我应该看什么文档吗?
  • 在调查此类问题时,我几乎总是在 irb 中。这使您可以探索返回的值,确定需要进行哪些调用或需要查询哪些属性。
猜你喜欢
  • 2014-09-27
  • 2011-01-29
  • 2010-12-17
  • 2016-09-25
  • 2011-03-17
  • 2012-07-16
  • 2014-05-20
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多