0
def scrape!(url)   
  Anemone.crawl(url) do |anemone|   
     anemone.on_pages_like %[/events/detail/.*] do |page|   
      show = {   
        headliner: page.doc.at_css('h1.summary').text,   
        openers: page.doc.at_css('.details h2').text
       }   
      puts show   
    end   
  end   
end    

在 Anemone 中编写刮板,它在引擎盖下使用 Nokogiri..

有时选择器.details h2'不返回任何内容,因为它不在 HTML 中,并且调用text它会引发异常。

我想避免到处都是 if/else ...

   if page.doc.at_css('.details h2').empty?   
      openers: page.doc.at_css('.details h2').text
   end

有没有更雄辩的方法来处理由不一致的标记产生的错误?例如 CoffeeScript 有存在操作符person.name?.first()。如果 HTML 包含该元素,则最好制作该对象并在其上调用文本。如果没有,请继续前进,不要将其添加到哈希中。

4

1 回答 1

0

你只需要这样做:

anemone.on_pages_like %[/events/detail/.*] do |page|   
      if not page.nil?
         ...#your code
      end
end
于 2013-09-02T20:48:49.283 回答