0

我试图在不使用 selenium 对象的情况下从另一个 url 获取重定向的 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。还有其他更好的方法吗?

谢谢!

4

1 回答 1

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 完成的。它通常不是,在这种情况下也不是。没有理由走出标准库,与另一个应用程序交谈,等等。像这样简单的事情。

于 2013-10-15T23:19:52.053 回答