我在应用程序中创建了一个类:
require 'nokogiri'
require 'csv'
require 'open-uri'
class Scraper
def self.test_method
url = "http://london.craigslist.co.uk/"
doc = Nokogiri::HTML(open(url))
Rails.logger.debug doc.to_yaml
end
end
在 rails 控制台中调用它时:Scraper.test_method
我得到一个空的节点缓存。但是,如果我直接在控制台中运行该方法的这些单独行,则响应是具有完整节点缓存的有效Nokogiri::HTML::Document
对象。
控制台和应用程序之间有什么不同?
--- !ruby/object:Nokogiri::HTML::Document
decorators:
node_cache: []
errors:
- !ruby/exception:Nokogiri::XML::SyntaxError
message: |
Tag article invalid
domain: 5
code: 801
level: 2
file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
line: 50
str1: article
str2:
str3:
int1: 0
column: 28
- !ruby/exception:Nokogiri::XML::SyntaxError
message: |
Tag section invalid
domain: 5
code: 801
level: 2
file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
line: 51
str1: section
str2:
str3:
int1: 0
column: 23
- !ruby/exception:Nokogiri::XML::SyntaxError
message: |
Tag header invalid
domain: 5
code: 801
level: 2
file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
line: 161
str1: header
str2:
str3:
int1: 0
column: 36
- !ruby/exception:Nokogiri::XML::SyntaxError
message: |
Tag footer invalid
domain: 5
code: 801
level: 2
file: /var/folders/lt/18lgdxts4052x8rf8xhf32v00000gn/T/open-uri20131218-62789-1tuxgqp
line: 678
str1: footer
str2:
str3:
int1: 0
column: 9
Scraper#test_method
的最后一行是Rails.logger
行,它返回 nil,导致您的方法返回 nil。 您需要在方法末尾使用 return doc
(或仅使用 doc
),以便返回该结果。