2012-01-11 20 views
18

मेरे पास निम्न पायथन स्क्रिप्ट है और यह खूबसूरती से काम करता है।पायथन रीडायरेक्ट का पालन करें और फिर पेज डाउनलोड करें?

import urllib2 

url = 'http://abc.com' # write the url here 

usock = urllib2.urlopen(url) 
data = usock.read() 
usock.close() 

print data 

हालांकि, कुछ यूआरएल मैं इसे 2 या अधिक बार रीडायरेक्ट कर सकता हूं। डेटा लोड करने से पहले रीडायरेक्ट को पूरा करने के लिए मेरे पास पाइथन इंतजार कैसे हो सकता है। उदाहरण के लिए जब

http://www.google.com/search?hl=en&q=KEYWORD&btnI=1 

साथ ऊपर कोड है जो एक गूगल खोज पर im भाग्यशाली बटन से टकराने की equvilant है का उपयोग कर, मैं:

>>> url = 'http://www.google.com/search?hl=en&q=KEYWORD&btnI=1' 
>>> usick = urllib2.urlopen(url) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open 
    response = meth(req, response) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error 
    return self._call_chain(*args) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain 
    result = func(*args) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 403: Forbidden 
>>> 

Ive (यूआरएल, डेटा, समय समाप्त करने की कोशिश की) हालांकि, मुझे यकीन नहीं है कि वहां क्या रखा जाए।

संपादित करें: मैं वास्तव में पता चला है कि अगर मैं अनुप्रेषित न और सिर्फ पहली कड़ी के शीर्षक का इस्तेमाल किया, मैं अगले रीडायरेक्ट का स्थान हड़पने और प्रयोग

+0

आप से परिचित हैं 'HTTPRedirectHandler' – RanRag

+0

मैं नहीं था। बस इसे गुगल किया। मैं देख सकता हूं कि इसे कैसे पालन नहीं किया जाए। हालांकि, मैं इसे – Cripto

+0

का पालन करने के लिए मजबूर नहीं कर सकता हूं, मुझे पता है कि यह थोड़ी देर हो गया है, लेकिन क्या आप मेमोरी वॉल्ट में गहरी खुदाई कर सकते हैं और मुझे बता सकते हैं कि आपने इस समस्या को कैसे हल किया? धन्यवाद! – tmthyjames

उत्तर

15

आप जो हैंडलिंग अनुप्रेषित नियंत्रित करने के लिए बेहतर एपीआई है अनुरोध पुस्तकालय के साथ बेहतर हो सकता है:

http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history

अनुरोध:

http://pypi.python.org/pypi/requests/ (मनुष्य के लिए urllib प्रतिस्थापन)

+0

सही जवाब नहीं था, लेकिन इससे मुझे जो चाहिए वह मुझे ढूंढने में मदद मिली। – Cripto

+3

@ user1048138: क्या आप हमें बताएंगे कि आपको अपनी समस्या का समाधान करने के लिए क्या मिला? –

+0

यह सुविधा सिर्फ मेरे दिमाग को ब्लेड करें। साथ ही, अन्य अनुरोधों (जैसे HEAD) के लिए नोट करना महत्वपूर्ण है, आपको काम करने के लिए allow_redirects को True पर सेट करना होगा। – halflings

-2

आप पूरी तरह करना है मेरा अंतिम कड़ी के रूप में कर सकते हैं कि ऐसा करने के लिए? टवील (http://twill.idyll.org/) जैसे कुछ का उपयोग करने के बारे में - जो आप बहुत आसान करना चाहते हैं (और यह पाइथन) बनाता है।

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