如何在不使用Python中的Selenium的情况下获取重定向的URL

时间:2013-10-15 23:07:23

标签: python selenium

我正在尝试从另一个网址获取重定向网址而不使用selenium对象。我有一个网址:

     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。还有其他更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

如果这只是一个HTTP重定向,标准库中的urllib.request / urllib2可以跟踪重定向,第三方HTTP客户端库如requests和{{3 }}。实际上,在最简单的用例中,它们会自动完成。

所以,只是:

>>> 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.request替换为urllib2,它的工作方式相同。)


您需要使用Selenium(或其他浏览器自动化和/或JS环境库)的唯一原因是重定向是通过页内JavaScript完成的。它通常不是,在这种情况下不是。对于像这样的简单事情,没有理由走出标准库,与另一个应用程序交谈等。