我的代码如下:
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
如何获取所需的最终到达网址?任何帮助将不胜感激!
答案 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)