获取最终重定向的URL

7 投票
2 回答
19324 浏览
提问于 2025-04-18 10:35

我的代码如下:

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

基本上,当网址被重定向了两次后,输出应该是:

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

这个方法是可行的,他们是通过JavaScript或者HTML标签来进行重定向的,所以如果你去找“Location”这个头信息是没用的。这虽然不是个很优雅的解决办法,但确实能解决问题。

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)
18

这可能对你想要的功能来说有点复杂,但它是一个替代使用正则表达式的方法。这个回答使用了Selenium这个网页自动化工具的Python接口来处理网页重定向。它还会在浏览器窗口中打开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)

你还可以让浏览器在后台运行,这样就不会弹出窗口。这个方案的一个额外好处是,如果他们改变了重定向的方式,你就不需要更新代码中的正则表达式了。

撰写回答