2011-04-04 20 views
6

HTMLparser kullanarak küçük bir ayrıştırıcı yapıyorum ve bir bağlantının nereye yönlendirildiğini öğrenmek istiyorum. Bunu nasıl açıklayacağımı bilmiyorum, bu yüzden lütfen şu örneğe bakın:Yönlendirilmiş URL'yi Python'da belirleme

Sayfamda, http://www.mylink.com adresine yönlendiren http://www.myweb.com?out=147 kaynağında bir bağlantım var. http://www.myweb.com?out=147'u problemsiz olarak ayrıştırabilirim ama http://www.mylink.com'u nasıl alacağımı bilmiyorum.

cevap

3

HTML kaynak kodunu ayrıştırma yoluyla yönlendirme URL'sini elde edemezsiniz. Yönlendirmeler sunucu tarafından tetiklenir ve istemci tarafından DEĞİL. İlgili URL'ye bir HTTP isteği gerçekleştirmeli ve sunucunun HTTP yanıtını kontrol etmelisiniz - özellikle HTTP durum kodu 304 (Yönlendirme) ve yeni URL için. Bir URL yönlendirir nereye

11

Öğrenmek için (Python 3'te urllib.request) urllib2 ve onun HTTPRedirectHandler kullanabilirsiniz. İşte bunu yapan bir işlev:

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

Bununla birlikte, bir yönlendirme başka bir yeniden yönlendirmeye yönlendirirse, yalnızca son yönlendirmeyi elde edersiniz. Örneğin, gerçek bir web sitesine başvuran bir bit.ly bağlantısını ifade eden bir t.co (Twitter'ın URL kısaltıcısı) bağlantınız olduğunu varsayalım. Ardından, bit.ly yerine "gerçek" web sitesine sahip olacaksınız. bağlantı. Bu istediği şey olabilir veya olmayabilir. –

+3

Ve bu sorunun cevabını arayan başka birisi, İstekler kitaplığı (http://docs.python-requests.org/en/latest/index.html) bunu sadece mümkün değil, aynı zamanda önemsiz kılıyor. –

İlgili konular