1

所以我有一个使用 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 上的字符串接收,以及为什么我需要采取额外的步骤来将每一行分解为一个数组吗?

任何帮助表示赞赏。

4

1 回答 1

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
于 2013-05-17T05:18:39.400 回答