2011-04-04 40 views
6

我用HTMLparser做了一個小解析器,我想知道鏈接重定向的位置。我不知道如何解釋這個,所以請看下面這個例子:在Python中確定重定向的URL

我的頁面有鏈接源:http://www.myweb.com?out=147,它重定向到http://www.mylink.com。我可以解析http://www.myweb.com?out=147沒有任何問題,但我不知道如何獲得http://www.mylink.com

回答

3

您無法通過解析HTML源代碼來獲取重定向URL。 重定向由服務器觸發,而不是由客戶端觸發。您需要對相關URL執行HTTP請求並檢查服務器的HTTP響應 - 特別是HTTP狀態碼304(重定向)和新URL。

11

您可以使用urllib2urllib.request在Python 3中)及其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

一個輕微的問題是,如果一個重定向重定向到另一個重定向,你只會得到最後的重定向。例如,假設你有一個t.co(Twitter的URL縮寫器)鏈接,它實際上是指一個bit.ly鏈接,它指的是一個真實的網站,那麼你會得到「真實」的網站而不是bit.ly鏈接。這可能或可能不是人們想要的。 – 2011-11-28 17:15:19

+3

如果其他人在尋找答案,可以看到這個問題,請求庫(http://docs.python-requests.org/en/latest/index.html)使這不僅可能,而且也是微不足道的。 – 2011-11-29 21:32:48