获取最终重定向的URL
我的代码如下:
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)
你还可以让浏览器在后台运行,这样就不会弹出窗口。这个方案的一个额外好处是,如果他们改变了重定向的方式,你就不需要更新代码中的正则表达式了。