2013-10-15 81 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

相关问题