3
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でエラーを見つけ、それに応じて失敗しているようです。

これを回避する方法について何か提案はありますか?

4

1 に答える 1

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]ていますが、のこぎり文書の要素を呼び出しても、文書は配列ではないため意味がありません。したがって、それらはすべてnil次のとおりです。

doc[1]
#=> nil
doc[2]
#=> nil

(他の URL についても同じことを行うと、まったく同じ結果が得られます。)

ドキュメントの 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>...
于 2012-11-25T12:07:31.527 に答える