2013-02-13 12 views
6

मैं कुछ डेटा इकट्ठा करने के लिए मैकेनाइज और नोकोगिरी का उपयोग कर रहा हूं। मुझे एक ऐसी तस्वीर को सहेजने की ज़रूरत है जो प्रत्येक अनुरोध पर यादृच्छिक रूप से उत्पन्न हो।मैकेनाइज और नोकोगिरी के साथ छवि सहेजें?

मेरे प्रयास में मुझे सभी चित्रों को डाउनलोड करने के लिए मजबूर होना पड़ता है, लेकिन केवल एक ही मैं चाहता हूं कि छवि div#specific के भीतर स्थित है।

इसके अतिरिक्त, क्या इसे सहेजने के बिना बेस 64 डेटा उत्पन्न करना संभव है, या इसके स्रोत को पुनः लोड करना संभव है?

require 'rubygems' 
require 'mechanize' 
require 'nokogiri' 

a = Mechanize.new { |agent| 
    agent.keep_alive = true 
    agent.max_history = 0 
} 

urls = Array.new() 
urls.push('http://www.domain.com'); 

urls.each {|url| 

    page = a.get(url) 
    doc = Nokogiri::HTML(page.body) 

    if doc.at_css('#specific') 

     page.images.each do |img| 
      img.fetch.save('picture.png') 
     end 

    end 
} 
+2

उम्मीद है कि यह कैप्चा को हराने का प्रयास नहीं है। –

उत्तर

25

विशिष्ट स्थान से छवियों को लाने के लिए:

agent.get(images.first.attributes["src"]).save "path/to/folder/image_name.jpg" 

सहेजे बिना इनकोडिंग छवि प्राप्त करने के लिए:

encoded_image = Base64.encode64 agent.get(images.first.attributes["src"]).body_io.string 

मैं

agent = Mechanize.new 
page = agent.get('http://www.domain.com') 
images = page.search("#specific img") 

छवि को बचाने के लिए यह सुनिश्चित करने के लिए बस यह चला गया कि एन्कोड किए गए चित्र को डीकोड किया जा सकता है:

File.open("images/image_name.jpg", "wb") {|f| f.write(Base64.decode64(encoded_image))} 
+0

अगर मैं छवि को सहेजने में गलत नहीं हूं तो इस तरह से src reloads? मुझे स्रोत को फिर से लोड करने के बिना, छवि को सहेजने, या बेस 64 प्राप्त करने की आवश्यकता है। – charliexx

+7

कोई रीलोडिंग नहीं होती है। एक इंटरनेट ब्राउज़र के विपरीत, मैकेनाइजेशन स्वचालित रूप से छवियों या किसी अन्य संपत्ति को डाउनलोड नहीं करता है। यह केवल HTML दस्तावेज़ लोड करता है। फिर आपको दस्तावेज़ में आवश्यक छवि यूआरएल मिलती है और स्पष्ट रूप से छवि डाउनलोड होती है। – victmask

+0

क्या छवि को फिर से लोड किए बिना इसे करने का कोई तरीका है? शायद एक और मणि का उपयोग कर? – charliexx

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