2012-10-04 27 views
5

Tôi đang cố gắng để mã một trang web đơn giản cạo trong ruby. Nó hoạt động cho đến url 29 sau đó tôi nhận được thông báo lỗi này:RUBY - web cạo - (OpenURI :: HTTPError)

C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:346:in `open_http': 500 Internal Server Er 
ror (OpenURI::HTTPError) 
     from C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:775:in `buffer_open' 
     from C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop' 
     from C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:201:in `catch' 
     from C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop' 
     from C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri' 
     from C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:677:in `open' 
     from C:/Ruby193/lib/ruby/1.9.1/open-uri.rb:33:in `open' 
     from test.rb:24:in `block (2 levels) in <main>' 
     from test.rb:18:in `each' 
     from test.rb:18:in `block in <main>' 
     from test.rb:14:in `each' 
     from test.rb:14:in `<main>' 

Mã của tôi:

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

aFile=File.new('data.txt', 'w') 

ag = 0 
    for i in 1..40 do 
    agenzie = ag + 1 

    #change url parameter 

    url = "http://www.infotrav.it/dettaglio.do?sort=*RICOVIAGGI*&codAgenzia=" + "#{ ag }" 
    doc = Nokogiri::HTML(open(url)) 
    aFile=File.open('data.txt', 'a') 
    aFile.write(doc.at_css("table").text) 
    aFile.close 
    end 

Bạn có một số ý tưởng để giải quyết nó? Cảm ơn!

như

Trả lời

3

Ở đây, hãy để tôi làm sạch nó lên cho bạn:

File.open('data.txt', 'w') do |aFile| 
    (1..40).each do |ag| 
    url = "http://www.infotrav.it/dettaglio.do?sort=*RICOVIAGGI*&codAgenzia=#{ag}" 
    response = open(url) rescue nil 
    next unless response 
    doc = Nokogiri::HTML(response) 
    aFile << doc.at_css("table").text 
    end 
end 

ghi chú:

  • sử dụng khối phong cách File.open có nghĩa là tập tin sẽ tự đóng khi khối thoát
  • sử dụng mỗi để lặp lại thay vì cho vòng lặp
+0

Cảm ơn tôi là một người mới trong ruby ​​... – jackkkk

3

nếu bạn không thể khắc phục vấn đề trên máy chủ từ xa, hãy cố gắng giải cứu từ lỗi và tiếp tục tháo dỡ:

begin 
    doc = Nokogiri::HTML(open(url)) 
    aFile=File.open('data.txt', 'a') 
    aFile.write(doc.at_css("table").text) 
    aFile.close 
rescue => e 
    puts e.message 
end 
4

Mã này có một typo nhỏ. Nó phải là ag = ag + 1 và không phải là agenzie = ag + 1. Tôi cho rằng đã xảy ra khi bạn sao chép mã vào stackoverflow, vì mã sẽ không hoạt động với lỗi đánh máy.

Tôi đã có thể chạy mã cục bộ và gặp lỗi tương tự. Tắt url being accessed (khi codAgenzia = 30) không có sẵn trên trang web http://www.infotrav.it; nó sẽ trả về một lỗi HTTP 500.

Vì vậy, vấn đề không phải là với mã của bạn, nhưng với máy chủ từ xa (http://www.infotrav.it)

Như slivu đề cập trong câu trả lời của mình, bạn nên giải cứu các lỗi và tiếp tục cạo.

+0

Prakash, bây giờ tôi hiểu .. vấn đề là máy chủ trên htt p: //www.infotrav.it/dettaglio.do? sort =% 2aRICOVIAGGI% 2a & codAgenzia = 30 lấy một số lỗi! Cảm ơn! – jackkkk

+0

Bạn được chào đón! Đừng quên đánh dấu câu trả lời là được chấp nhận. –

Các vấn đề liên quan