2011-02-15 55 views
0

好吧我正在做一個Django項目,我有不同的網站的聯盟鏈接。所以我希望能夠自動確定最終域名在所有重定向之後的最終位置,因爲分配鏈接的分配將來自第三方而不是其自身的目的地。例如,會員鏈接可能如下所示:如何在使用python,django或基於shell的工具執行重定向之後捕獲最終的url?

http://afl.affiliatenetworking.com/tracker.asp?ref=abc123afialiate  

但最終可能會重定向到amazon.com。 Python中有什麼(或Linux上的外部工具),可以讓我知道在所有的重定向後,我最終結束了。

謝謝!

回答

3

默認情況下,urllib2.urlopen()遵循重定向。迴應有一個geturl()方法,它返回您結束的實際地點的地址。見the documentation

+0

嗯,感謝的是,它可能對發送重定向頁面標題的工作,但它似乎沒有對聯營公司工作我試過的頁面。看着用wget抓取的源代碼,我發現他們使用meta http-equiv =「refresh」標籤。任何方式來得到這個工作? – UserZer0

1

您不需要任何自定義工具來執行此類檢查。基本外殼utils的足夠:

curl -s --head --location 'http://afl.affiliatenetworking.com/tracker.asp?ref=abc123afialiate'|grep '^Location'|tail -n 1

以上將遵循所有重定向,並提取最後Location頭,這是最終的目的地。

+0

我沒有從這個命令輸出。可能對我在對另一個答案的評論中所說的同樣的事情做同樣的事情。 – UserZer0

+0

當然。說實話,使用meta標籤重定向是非常蹩腳的,我幾乎無法表達它。無論如何,在這種情況下,您需要解析輸出HTML以訪問該數據。 –

0

你也可以嘗試FancyURLopener(http://docs.python.org/library/urllib.html#urllib.FancyURLopener),它處理大多數重定向的情況,並且因爲它的子類urlopener,你可以使用geturl()。所以,你可以簡單地說:

fancy = urllib.FancyURLopener({}) 
link = fancy.open('http://some/affiliate/link') 
final_link = link.geturl() 

對我的作品很大:)

相關問題