Jef*_*eff 0 ruby python url http
我很沮丧,试图使用Ruby来获取特定的url内容.
我尝试了许多不同的方式,比如open-uri,标准请求到目前为止都没有.我总是得到空的HTML.我还尝试使用python来获取始终返回正确html内容的相同url.我真的不确定为什么......请帮助我,因为我对Ruby和Python都是新手... 我想使用Ruby(更喜欢整洁的语法和人性化的函数名称,更容易使用gem和homebrew安装libs(在mac上) )比python easy_install)但我现在正在考虑Python,因为它只是工作(但仍然试图让我的头围绕2.x和3.x问题).我可能会做一些非常愚蠢的事情,但我认为这是不太可能的.
ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-darwin10.6.0]
实施1:
url = URI.parse('http//:www.stackoverflow.com/') req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) }
puts res.body #empty
Run Code Online (Sandbox Code Playgroud)
实施2:
doc = Nokogiri::HTML(open("http//:www.stackoverflow.com/", "User-Agent" => "Safari"))
#empty
#I tried to use without user agent, without Nokogiri none worked.
Run Code Online (Sandbox Code Playgroud)
Python实现每次都很完美
f = urllib.urlopen("http//:www.stackoverflow.com/")
# Read from the object, storing the page's contents in 's'.
s = f.read()
f.close()
print s
Run Code Online (Sandbox Code Playgroud)
如果这是您的确切代码,则由于多种原因无效.
所以
require 'net/http'
url = URI.parse('http://www.yellowpages.com.au/search/listings?clue=plumber&locationClue=Australia')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) }
puts res.body
Run Code Online (Sandbox Code Playgroud)
在nokogiri中使用open也是如此
编辑:该网站多次返回不良结果:
counter = 0
20.times do
url = URI.parse('http://www.yellowpages.com.au/search/listings?clue=plumber&locationClue=Australia')
req = Net::HTTP::Get.new(url.path)
res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) }
sleep 1
counter +=1 unless res.body.empty?
end
puts counter
Run Code Online (Sandbox Code Playgroud)
对我来说,这只是一次非空身体的回归.如果你在另一个站点替换它,它一直在工作
curl "http://www.yellowpages.com.au/search/listings?clue=plumber&locationClue=Australia"
Run Code Online (Sandbox Code Playgroud)
产生相同的不一致结果.