आंतरिक रूप से, Mechanize एचटीएमएल में एक डीओएम में पार्सिंग को संभालने के लिए Nokogiri का उपयोग करता है। आप नोकोगिरी दस्तावेज पर जा सकते हैं ताकि आप या तो लौटा पृष्ठ में चारों ओर खोदने के लिए XPath या CSS एक्सेसर्स का उपयोग कर सकें।
इस तरह केवल Nokogiri के साथ रीडायरेक्ट URL प्राप्त करने के लिए है:
require 'nokogiri'
html = <<EOT
<html>
<head>
<meta http-equiv="refresh" content="2;url=http://www.example.com/">
</meta>
</head>
<body>
foo
</body>
</html>
EOT
doc = Nokogiri::HTML(html)
redirect_url = doc.at('meta[http-equiv="refresh"]')['content'][/url=(.+)/, 1]
redirect_url # => "http://www.example.com/"
doc.at('meta[http-equiv="refresh"]')['content'][/url=(.+)/, 1]
टूट जाता है करने के लिए नीचे: refresh
के http-equiv
विशेषता के साथ <meta>
टैग के लिए सीएसएस एक्सेसर की पहली आवृत्ति (at
) का पता लगाएं। उस टैग की content
विशेषता लें और url=
के बाद स्ट्रिंग वापस करें।
यह एक सामान्य उपयोग के लिए कुछ मशीनीकरण कोड है। क्योंकि आप आप पर आधार मेरा करने के लिए कोई नमूना कोड दे दी है इस से काम करना होगा:
agent = Mechanize.new
page = agent.get('http://www.examples.com/')
redirect_url = page.parser.at('meta[http-equiv="refresh"]')['content'][/url=(.+)/, 1]
page = agent.get(redirect_url)
संपादित करें: at('META[HTTP-EQUIV=\"Refresh\"]')
आपका कोड ऊपर at()
है। ध्यान दें कि आप एकल-उद्धृत स्ट्रिंग के अंदर डबल-कोट्स से बच रहे हैं। इसके परिणामस्वरूप बैकस्लैश होता है जिसके बाद स्ट्रिंग में डबल-कोट होता है जो मेरा नमूना उपयोग नहीं करता है, और यह मेरा पहला अनुमान है कि आपको त्रुटि क्यों मिल रही है। नोकोगिरी टैग नहीं ढूंढ सकता क्योंकि <meta http-equiv=\"Refresh\"...>
नहीं है।
संपादित करें:
agent.follow_meta_refresh = true
यह भी parse the meta tag के लिए एक विधि है और सामग्री वापस: मशीनीकरण निर्मित एक तरह से सेट करके मेटा-ताज़ा, संभाल करने के लिए है। डॉक्स से:
पार्स (सामग्री, uri)
एक मेटा टैग की सामग्री की विशेषता में विलंब और यूआरएल पार्स करता है। जब कोई यूआरएल निर्दिष्ट नहीं किया जाता है तो पार्स को वर्तमान पृष्ठ की यूरी को यूआरएल का अनुमान लगाने की आवश्यकता होती है। यदि कोई ब्लॉक दिया जाता है, तो आगे की प्रक्रिया के लिए पार्स विलंब और यूआरएल पास किया जाएगा। देरी और यूआरएल को पार्स नहीं किया जा सकता है।
# <meta http-equiv="refresh" content="5;url=http://example.com/" />
uri = URI.parse('http://current.com/')
Meta.parse("5;url=http://example.com/", uri) # => ['5', 'http://example.com/']
Meta.parse("5;url=", uri) # => ['5', 'http://current.com/']
Meta.parse("5", uri) # => ['5', 'http://current.com/']
Meta.parse("invalid content", uri) # => nil
यह कोड की एक बुनियादी उदाहरण शामिल करने के लिए उपयोग कर रहे हैं और URL को जब आप तक पहुँच रहे हैं वास्तव में महत्वपूर्ण है प्रश्न पूछें। –