获取最终重定向的URL

时间:2014-06-21 07:04:06

标签: python urllib url-redirection python-3.4

我的代码如下:

url_orig ='http://www.has-sante.fr/portail/jcms/c_676945/fr/prialt-ct-5245'
u = urllib.request.urlopen(url_orig)
print (u.geturl())

基本上,当URL被重定向两次时。输出应为:

http://www.has-sante.fr/portail/upload/docs/application/pdf/2008-07/ct-5245_prialt_.pdf

但我得到的输出是第一次重定向:

http://www.has-sante.fr/portail/plugins/ModuleXitiKLEE/types/FileDocument/doXiti.jsp?id=c_676945

如何获取所需的最终到达网址?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:6)

这可能对你想要的东西有点过分,但它是使用正则表达式的替代方法。此答案使用Selenium Web自动机Python APIs来跟踪重定向。它还将在浏览器窗口中打开pdf文件。下面的代码要求您使用Firefox,但您也可以使用其他浏览器将名称替换为您要使用的名称,即webdriver.Chrome(),webdriver.Ie()。

安装selenium:pip install selenium

代码:

from selenium import webdriver

driver = webdriver.Firefox()
link = 'http://www.has-sante.fr/portail/jcms/c_676945/fr/prialt-ct-5245'

driver.get(link)
print(driver.current_url)

也可以在后台运行浏览器,因此不会弹出任何窗口。此解决方案的另一个好处是,如果它们改变了重定向的工作方式,则无需更新代码中的正则表达式。

答案 1 :(得分:0)

这将有效,他们使用javascript或html标签重定向,因此寻找“位置”标头不会工作。这不是一个优雅的解决方案,但它确实有效。

import urllib.request
url ='http://www.has-sante.fr/portail/jcms/c_676945/fr/prialt-ct-5245'

req = str(urllib.request.urlopen(url).read())
url = req.split("URL=\\'")[1].split("\\'\">'")[0].strip("../")

print("http://www.has-sante.fr/portail/" + url)