2012-01-11 18 views
18

Aşağıdaki python komut dosyasına sahibim ve güzel çalışıyor. Ancak, verdiğim bazı URL'ler 2 veya daha fazla kez yeniden yönlendirebilir. Verileri yüklemeden önce yönlendirmelerin tamamlanmasını beklemek için python'u nasıl kullanabilirim? Örneğin bir google aramasında im şanslı düğmeye vurmanın equvilant olanPython yönlendirmeleri takip eder ve daha sonra sayfayı indirir mi?

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

ile yukarıdaki kodu kullanarak, alıyorum:

>>> 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 (url, veri, zaman aşımı çalıştı) Ancak, ne koymak için emin değilim.

DÜZENLEME: ben yönlendirmek yoksa aslında öğrendim ve sadece, bir sonraki yönlendirme yerini kapmak ve benim son halka olarak

+0

sen aşina 'HTTPRedirectHandler' – RanRag

+0

Ben değildim. Sadece googled. Bunu takip etmeyi nasıl başarabileceğimi görebiliyorum. Ancak, bunu zorlayamayacağım – Cripto

+0

'u takip etmeliyim, bir süredir biliyorum, ama bellek kasasında derinlik kazabilir ve bu sorunu nasıl çözdüğümü söyleyebilir misiniz? Teşekkürler! – tmthyjames

cevap

15

Sen işleme yönlendirme kontrol etmek için daha iyi API'leri vardır İstekler kütüphanesi ile daha iyi olabilir:

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

İstekler:

http://pypi.python.org/pypi/requests/ (insanlar için urllib yedek)

+0

Doğru cevap değildi, ama ihtiyacım olanı bulmama yardımcı oldu. – Cripto

+3

@ user1048138: Sorununuzu çözmek için bulduklarınızı bize anlatır mısınız? –

+0

Bu özellik sadece BLEW aklımı. Ayrıca, diğer istekleri (HEAD gibi) not etmek önemlidir, bunun için allow_redirects'i true olarak ayarlamanız gerekir. – halflings

-2

kesinlikle gerek var mı onu kullanabilirsiniz ilk bağlantının başlığını kullanılan Bu şekilde mi? Dimi (http://twill.idyll.org/) gibi bir şey kullanmayla ilgili - ne yapmak istediğinizi çok kolay (ve Python) yapar.

İlgili konular