【问题标题】:undefined method `children' for nil:NilClass (NoMethodError)nil:NilClass (NoMethodError) 的未定义方法 `children'
【发布时间】:2020-02-10 07:35:33
【问题描述】:

我正在尝试恢复一个在 nokogiri 的帮助下解析网站的简单示例,并遇到一个错误 undefined method `children' for nil:NilClass (NoMethodError)

    require 'open-uri'

url = 'http://www.cubecinema.com/programme'
html = open(url)
puts html

require 'nokogiri'

doc = Nokogiri::HTML(html)
showings = doc.css('.showing').map do |showing|
  showing_id = showing['id'].split('_').last.to_i

  tags = showing.css('.tags a')
             .map{|tag| tag.text.strip}

  title_el = showing.at_css('h1 a')
                 .children
                 .delete_if{|c| c.name == 'span'}

  title = title_el.text.strip

  dates = showing.at_css('.start_and_pricing')
              .inner_html
              .strip
              .split('<br>')
              .map(&:strip)
              .map{|d| DateTime.parse(d)}

  description = showing.at_css('.copy')
                    .text
                    .delete('[more...]')
                    .strip

  {id:          showing_id,
   title:       title,
   tags:        tags,
   dates:       dates,
   description: description}
end

我找到了一个可能的解决方案https://translate.googleusercontent.com/translate_c?anno=2&depth=1&rurl=translate.google.com&sl=auto&sp=nmt4&tl=ru&u=https://github.com/dwightjack/grunt-email-boilerplate/issues/12&xid=25657,15700023,15700186,15700191,15700248,15700253&usg=ALkJrhgLkK2xqf-6SfL3K16DBRdtdNH0Cw,但不清楚 premailer 子任务是什么,阅读网站并没有真正帮助他们,我需要在哪里写下这些子任务。我将非常感谢您的澄清,无论是我的错误还是这些子任务需要如何确定的方式,我自己不理解并且缺乏经验这是可能的。

【问题讨论】:

  • 这是我收到的 title_el :[nil, nil, nil...],你明白了。您正在尝试删除不存在的内容。因此错误。

标签: ruby nokogiri


【解决方案1】:

由于缺乏声誉,我无法发表评论,所以我只能在答案部分提供建议。

所以,我认为你应该首先检查showing.at_css('h1 a') 实例,以确保它有一个children 方法。一些 Nokogiri 对象没有任何子对象(例如元标记)。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    我在本地运行您的程序,但在您正在抓取的代码部分中找不到任何标签。

    您收到此错误的原因是因为 Nokogiri 正在返回一个 nil 元素,而您正试图删除已经没有任何价值的东西,因此给您 NilClass 错误。

    这是您尝试从中检索“h1 a”的代码部分。

    <div class="showing" id="event_10427"> <div class="event_image"> <a href="/programme/event/vula-viel-do-not-be-afraid-album-tour,10427/"> 
        <img src="/media/diary/thumbnails/MSJ_vvlive.jpg.600x0_q45.jpg" alt="Picture for event Vula Viel - “Do Not Be Afraid” Album Tour"></a> <span class="tags"> <a href="/programme/view/music/" class="tag_music">music</a> </span> </div> <!-- div event_image --> <a href="/programme/event/vula-viel-do-not-be-afraid-album-tour,10427/"> 
    <p><span class="pre_title"> Ear Trumpet Music presents </span></p> <h3>Vula Viel - “Do Not Be Afraid” Album Tour</h3> <span class="post_title"> </span> </a> <p></p> 
    <div class="event_details"> <p class="start_and_pricing"> Thu 28 March // 20:00 <br> </p> <p class="copy">The trio of music makers called Vula Viel weave sparse polyrhythms and intricate rhythm structures around ... [<a class="more" href="/programme/event/vula-viel-do-not-be-afraid-album-tour,10427/">more</a>]</p> </div> </div>
    

    如您所见,没有 h1 标签,因此 Nokogiri 在您的搜索中返回 nil。

    如果标签出错,您可以代表您更改标签;或者如果不是每个页面都有一个“h1 a”标签。您需要检查是否

    title_el = showing.at_css('h3 a')
    

    在您尝试删除它之前返回 nil。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 2013-01-14
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多