使用 Nokogiri 解析:"each" 和 "content",有效但出错

Parsing with Nokogiri: "each" and "content", works but gives error

我使用 Nokogiri gem 通过 'each' 和 'content' 方法解析网站。它是复杂的解析器,具有这些方法的多种用途。由于某种原因,在某些时候任务失败并出现错误。 nillclass 的未定义方法 'content'。并为我使用 类 的所有通道提供参考。这不是常规的致命错误,如果我尝试放置这些内容的结果,它会打印所需的结果但仍然崩溃。这是我得到的错误:

rake aborted!
undefined method `content' for nil:NilClass
/mnt/shoppe/lib/tasks/parser.rake:50:in `block (6 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:49:in `block (5 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:47:in `block (4 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:27:in `block (3 levels) in <top (required)>'
/mnt/shoppe/lib/tasks/parser.rake:12:in `block (2 levels) in <top (required)>'

我是 ruby 和 RoR 的新手。也许存在某种类型的错误,只有在达到一定数量的错误时才会使程序崩溃?找不到这样的提及,很可能我不知道要查找的关键字。所以任何帮助都会有用。谢谢。

Undefined method 'content' for nil:NilClass.

这个错误意味着,在你的 rake 任务的某个时刻,当你调用 something.content 时,你的 somethingnil

为避免此问题,您可以使用 try:

调用 content
something.try(:content)

这样,如果某些 somethingnil,您的程序就不会崩溃。

通常这意味着您的输入有时会发生变化。例如,您在循环中解析节点数组并尝试从 link 访问获取内容,如下所示:

<div><a href="">test</a></div>
<div><a href="">test</a></div>
<div></div>

注意第三个 div。如果您在代码中期望 div 始终包含 link,您的代码将在没有 link 的 div 上失败,因为 link 将是 nil 并尝试在 nil 上获取内容会给你一个错误。

要解决此问题,您可以使用 link.try(:content) 而不是直接调用 link.content