2011-04-04 34 views
6

में रीडायरेक्ट किए गए यूआरएल को निर्धारित करना मैंने HTMLparser का उपयोग करके थोड़ा पार्सर बनाया है और मैं जानना चाहता हूं कि एक लिंक रीडायरेक्ट किया गया है। मुझे नहीं पता कि इसे कैसे समझाया जाए, तो कृपया इस उदाहरण को देखें:पाइथन

मेरे पृष्ठ पर मेरे पास स्रोत पर एक लिंक है: http://www.myweb.com?out=147, जो http://www.mylink.com पर रीडायरेक्ट करता है। मैं बिना किसी समस्या के http://www.myweb.com?out=147 पार्स कर सकता हूं, लेकिन मुझे नहीं पता कि http://www.mylink.com कैसे प्राप्त करें।

उत्तर

3

आप एचटीएमएल स्रोत कोड को पार्स करके रीडायरेक्शन यूआरएल नहीं पकड़ सकते हैं। रीडायरेक्शन सर्वर द्वारा ट्रिगर किए जाते हैं और क्लाइंट द्वारा नहीं। आपको संबंधित यूआरएल पर एक HTTP अनुरोध करने की आवश्यकता है और सर्वर की HTTP प्रतिक्रिया जांचें - विशेष रूप से HTTP स्टेटस कोड 304 (रीडायरेक्शन) और नया यूआरएल के लिए।

11

आप पाइथन 3 में urllib2 (urllib.request और HTTPRedirectHandler का उपयोग कर सकते हैं ताकि यह पता चल सके कि कोई URL आपको रीडायरेक्ट करेगा। यहां एक ऐसा फ़ंक्शन है जो करता है:

import urllib2 

def get_redirected_url(url): 
    opener = urllib2.build_opener(urllib2.HTTPRedirectHandler) 
    request = opener.open(url) 
    return request.url 

print get_redirected_url("http://google.com/") 
# prints "http://www.google.com/" 
+3

इसके साथ एक मामूली गॉचा यह है कि अगर रीडायरेक्ट किसी अन्य रीडायरेक्ट पर रीडायरेक्ट करता है, तो आपको केवल अंतिम रीडायरेक्ट मिलेगा। उदाहरण के लिए, कहें कि आपके पास एक टी.को (ट्विटर का यूआरएल शॉर्टनर) लिंक है, जो वास्तव में थोड़ा सा लिंक संदर्भित करता है, जो कुछ वास्तविक वेबसाइट को संदर्भित करता है, फिर आपको बिट की बजाय "असली" वेबसाइट मिल जाएगी। संपर्क। यह हो सकता है कि वह चाहे जो हो। –

+3

और यदि कोई अन्य व्यक्ति इसका उत्तर देखता है तो यह प्रश्न देखता है, अनुरोध लाइब्रेरी (http://docs.python-requests.org/en/latest/index.html) यह न केवल संभव है बल्कि तुच्छ भी बनाता है। –