Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么我会得到;“错误的状态行”;来自Nokogiri的错误?_Ruby_Ruby On Rails 3_Screen Scraping_Nokogiri - Fatal编程技术网

Ruby 为什么我会得到;“错误的状态行”;来自Nokogiri的错误?

Ruby 为什么我会得到;“错误的状态行”;来自Nokogiri的错误?,ruby,ruby-on-rails-3,screen-scraping,nokogiri,Ruby,Ruby On Rails 3,Screen Scraping,Nokogiri,我的Ruby/Nokogiri脚本是: require 'rubygems' require 'nokogiri' require 'open-uri' f = File.new("enterret" + ".txt", 'w') 1.upto(100) do |page| urltext = "http://xxxxxxx.com/" + "page/" urltext << page.to_s + "/" doc = Nokogiri::HTML(open(url

我的Ruby/Nokogiri脚本是:

require 'rubygems'
require 'nokogiri'
require 'open-uri'

f = File.new("enterret" + ".txt", 'w')

1.upto(100) do |page|
  urltext = "http://xxxxxxx.com/" + "page/"
  urltext << page.to_s + "/"
  doc = Nokogiri::HTML(open(urltext))
  doc.css(".photoPost").each do |post|
    quote = post.css("h1 + p").text
    author = post.css("h1 + p + p").text
    f.puts "#{quote}" + "#{author}"
    f.puts "--------------------------------------------------------"
  end
end
需要“rubygems”
需要“nokogiri”
需要“打开uri”
f=File.new(“enteret”+“.txt”,“w”)
1.最多(100)个do |第页|
urltext=”http://xxxxxxx.com/“+”第页/“

urltext如果不知道您访问的是什么网站,很难说清楚,但我怀疑问题不在Nokogiri

http.rb
http.rb
报告了该错误,它很可能会抱怨返回了HTTPd头
http.rb
关心与HTTPd服务器的握手,会抱怨缺少/格式错误的头,但它不关心有效负载

另一方面,Nokogiri会关心有效负载,即HTML。DOCTYPE应该是HTML负载的一部分,因此我怀疑他们的服务器发送的是HTML DOCTYPE而不是MIME DOCTYPE,MIME DOCTYPE应该是
“text/HTML”

在Ruby 1.8.7 http.rb文件中,您将在代码中看到以下几行:

def response_class(code)
  CODE_TO_OBJ[code] or
  CODE_CLASS_TO_OBJ[code[0,1]] or
  HTTPUnknownResponse
end

这似乎是一个很可能产生您所看到的消息类型的地方。

请看下面的讨论:与您用来创建
urltext
的繁琐程序不同,请尝试:
urltext=”http://xxxxxxx.com/page/#{page}/“
。用Ruby编写时更为惯用。感谢您提供的信息,但是我离开了pc一段时间,并尝试重新运行脚本,它工作得非常完美,没有更改脚本的任何一行。有意思吗?这只是意味着服务器停止发送错误的响应代码。他们修好了。我同意,他们可能修好了服务器。发送HTML doctype而不是mime doctype是一个严重的错误,这可能会混淆任何信任mime类型的代码。浏览器通常不信任这些信息,因为开发人员很久以前就学会了不信任这些信息;他们可以扫描输出,看它是否是文本,寻找标签,看它是否是HTML。但是大多数与服务器对话的应用程序不会这样做,并且会假定mime类型的响应是正确的。这些年来我写了很多蜘蛛,我也学到了很多,所以对于一个蜘蛛,我会检查我得到了什么。
def response_class(code)
  CODE_TO_OBJ[code] or
  CODE_CLASS_TO_OBJ[code[0,1]] or
  HTTPUnknownResponse
end