2013-10-15 35 views
0

我試圖從另一個url獲取重定向的url而不使用硒對象。我有一個像網址:如何在不使用Python的Selenium的情況下獲取重定向的url

 http://registry.theknot.com/track/View?lt=RetailerGVR&r=325404419&rt=12160&a=994&st=RegistryProfile&ss=LinkedRegistries&sp=Logo 

,它被重定向到:

 http://www.target.com/RegistryGiftGiverCmd?isPreview=false&status=completePageLink&registryType=WD&isAjax=false&listId=NjPO_i-DoIafZPZSFhaBRw&clkid=2gTTqGRwsXS4x%3AexW%3ATGBxiqUkWXSi0It0P5VM0&lnm=Online+Tracking+Link&afid=The+Knot%2C+Inc.+and+Subsidiaries&ref=tgt_adv_xasd0002 

當通過一些瀏覽器中打開。

我想避免實例化一個Selenium對象,並提出一個Firefox/Chrome進程來獲取重定向的URL。還有其他更好的方法嗎?

謝謝!

回答

2

如果這僅僅是一個HTTP重定向,標準庫可以按照重定向就好urllib.request/urllib2,如第三方HTTP客戶端庫像requestsPycURL。事實上,在最簡單的用例中,它們是自動執行的。

所以,只要:

>>> import urllib.request 
>>> original_url = 'http://registry.theknot.com/track/View?lt=RetailerGVR&r=325404419&rt=12160&a=994&st=RegistryProfile&ss=LinkedRegistries&sp=Logo' 
>>> u = urllib.request.urlopen(original_url) 
>>> print(u.url) 
http://www.target.com/RegistryGiftGiverCmd?isPreview=false&status=completePageLink&registryType=WD&isAjax=false&listId=NjPO_i-DoIafZPZSFhaBRw&clkid=0b5XTmU%3A5WbqRETSYD20AQKOUkWXSGQgQSquVU0&lnm=Online+Tracking+Link&afid=The+Knot%2C+Inc.+and+Subsidiaries&ref=tgt_adv_xasd0002 

但如果你只想要的數據,你甚至不需要說:

>>> data = u.read() 

這就是重定向請求的內容。

(對於Python 2.x中,只需更換urllib.requesturllib2和它的工作原理是相同的。)


你需要使用Selenium(或其他瀏覽器的自動化和/或JS-的唯一原因環境庫)是如果重定向是通過頁內JavaScript完成的。它通常不是,在這種情況下不是。沒有理由超出標準庫,與另一個應用程序交談等等。

+0

非常感謝!它工作完美! – danielmaxx

相關問題