def noko_scrape
require 'nokogiri'
require 'open-uri'
url = "http://au.finance.yahoo.com/q/ta?s=ANZ.AX&t=2y"
doc = Nokogiri::HTML(open(url))
puts "Retrieved doc =" + doc[1..20]
...
我收到错误:
TypeError in StocksController#noko_scrape can't convert nil into String
(参考最后一行)。
似乎Nokogiri在HTML中发现错误并因此失败。
有关如何解决这个问题的任何建议吗?
答案 0 :(得分:4)
HTML中确实存在错误,如您尝试doc.errors
:
require 'nokogiri'
require 'open-uri'
url = "http://au.finance.yahoo.com/q/ta?s=ANZ.AX&t=2y"
doc = Nokogiri::HTML(open(url))
doc.errors
#=> [#<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: expecting ';'>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: expecting ';'>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: expecting ';'>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: htmlParseEntityRef: no name>, #<Nokogiri::XML::SyntaxError: Tag nobr invalid>, #<Nokogiri::XML::SyntaxError: Tag nobr invalid>, #<Nokogiri::XML::SyntaxError: Tag nobr invalid>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>, #<Nokogiri::XML::SyntaxError: Element script embeds close tag>]
但是,这与您获得的错误无关。您正在尝试将doc[1..20]
转换为字符串,但调用Nokogiri文档的元素没有意义,因为该文档不是数组。因此,它们都是nil
:
doc[1]
#=> nil
doc[2]
#=> nil
(对任何其他网址执行相同操作,您将获得完全相同的结果。)
如果,您想要的是文档的HTML,您可以使用to_html
方法获取该内容:
doc.to_html
#=> "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>...