2012-10-04 19 views
5

मैं रूबी में एक साधारण वेब स्क्रैपिंग कोड करने की कोशिश कर रहा हूं। यह तो 29 यूआरएल तक काम करता है मैं इस त्रुटि संदेश मिलता है:रूबी - वेब स्क्रैपिंग - (ओपनयूआरआई :: 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>' 

मेरे कोड:

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 

आप इसे हल करने के लिए कुछ विचार है? धन्यवाद!

उत्तर

3

यहाँ, मुझे यह साफ आप के लिए करते हैं:

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 

नोट:

  • का उपयोग कर ब्लॉक शैली File.open मतलब है फ़ाइल स्वयं बंद हो जाएगा जब ब्लॉक बाहर निकालता है
  • उपयोग प्रत्येक लूप
+0

धन्यवाद मैं रूबी में एक नौसिखिया हूँ ... – jackkkk

3

जैसे कि आप दूरस्थ सर्वर पर समस्या का समाधान नहीं कर सकते हैं, त्रुटि से बचाव और खत्म जारी रखने के लिए प्रयास करें:

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

कोड एक छोटी सी टाइपो है। यह ag = ag + 1 होना चाहिए और agenzie = ag + 1 नहीं होना चाहिए। मुझे लगता है कि आपने कोड को स्टैक ओवरफ्लो में कॉपी किया था, क्योंकि कोड टाइपो के साथ काम नहीं करता था।

मैं स्थानीय रूप से कोड चलाने में सक्षम था, और एक ही त्रुटि मिली। url being accessed (जब codAgenzia = 30) http://www.infotrav.it साइट पर उपलब्ध नहीं है; यह एक HTTP त्रुटि 500 ​​

तो समस्या अपने कोड के साथ नहीं है देता है, लेकिन दूरस्थ सर्वर (http://www.infotrav.it)

slivu उसके जवाब में उल्लेख किया है के साथ, तो आपको त्रुटि को बचाने और scraping जारी रखना चाहिए।

+0

प्रकाश, अब मैं समझता हूं .. समस्या यह है कि समस्या पर सर्वर पी: //www.infotrav.it/dettaglio.do? sort =% 2aRICOVIAGGI% 2a और codAgenzia = 30 कुछ त्रुटि पुनर्प्राप्त करें! धन्यवाद! – jackkkk

+0

आपका स्वागत है! उत्तर को स्वीकृत के रूप में चिह्नित करना न भूलें। –

संबंधित मुद्दे