Ruby 为什么我会得到;“错误的状态行”;来自Nokogiri的错误?
我的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
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.rbhttp.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