所以我有一个使用Mechanize来获取页面的应用程序。请注意我正在尝试解析的HTTP站点是* .TXT文件。
在IRB中我运行一个简单的程序,如:
require 'rubygems'
require 'mechanize'
require 'nokogiri'
@agent = Mechanize.new{|agent| agent.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0a2) Gecko/20111101 Firefox/9.0a2'}
@agent.get(http://some_sort_of_text_file.txt)
for line in @agent.page.content
puts line
end
运行正常,我将文本文件中的每一行作为输出。
但是当我把它推到Heroku时......我得到一个这样的错误:
NoMethodError (undefined method `each' for #<String:0x00000003ebf200>):
嗯......我发现由于一些奇怪的原因,该页面变成了一个巨大的字符串文件,我需要采取另一步来做一些编程,如:
@doc = @agent.page.content
@items =[]
start =0
@doc.gsub(/|/, " ")
@doc.gsub(/\\n/,"|")
counter=0
while counter <= @doc.length
if(@doc[counter]== "|")
@items << @doc[start..counter]
start=counter+1
end
counter = counter+1
end
知道为什么它将该网站作为Heroku上的字符串,以及为什么我需要采取额外的步骤将每一行分解为一个数组?
感谢任何帮助。
答案 0 :(得分:1)
当我在本地计算机上以irb运行代码时,@agent.page.content
是一个字符串。
如果您想要的是获取结果并将其转换为数组,这将起作用:
# (put this after @agent.get(http://some_sort_of_text_file.txt)
lines = @agent.page.content.split("\n")
# Now you can do something like this if you want
lines.each do |line|
puts line
end