我正在尝试借助nokogiri解析站点的简单示例,并针对nil:NilClass(NoMethodError)出现错误的未定义方法'children'
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,但不清楚预邮子任务是什么,阅读站点并不能真正帮助他们,我需要在哪里写下这些子任务。我将不胜感激,无论是由于自己的错误还是确定这些子任务的方式,我本人都不理解,并且缺乏经验。
答案 0 :(得分:0)
由于缺乏声誉,我不能只留下评论,所以我只能在答案部分提供建议。
因此,我认为您应该首先检查show.at_css('h1 a')实例,以确保它具有子方法。某些Nokogiri对象没有任何子代(例如meta标签)。希望对您有所帮助。
答案 1 :(得分:0)
我在本地运行了程序,但是在要抓取的代码部分中找不到任何标签。
收到此错误的原因是因为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。