如何在python中捕获重定向的url

时间:2013-03-22 06:57:27

标签: python

我在我的网站上创建了一个页面http://shedez.com/test.html此页面将用户重定向到我服务器上的jpg

我想使用python脚本将此图像复制到本地驱动器。我希望python脚本首先转到主URL,然后到达图片的目标网址

然后复制图像。截至目前,目标网址是硬编码的,但将来它将是动态的,因为我将使用地理编码通过IP查找城市,然后将我的用户重定向到他们城市的当天图片。

==我现在的剧本===

import  urllib2, os

req = urllib2.urlopen("http://shedez.com/test.html")

final_link = req.info()
print req.info()

def get_image(remote, local):   
    imgData = urllib2.urlopen(final_link).read()
    output = open(local,'wb')
    output.write(imgData)
    output.close()
    return local

fn = os.path.join(self.tmp, 'bells.jpg')
firstimg = get_image(final_link, fn)

4 个答案:

答案 0 :(得分:3)

它似乎不是标题重定向。这是网址的正文 -

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n<html>\n<head>\n<title>Your Page Title</title>\n<meta http-equiv="REFRESH" content="0;url=htt
p://2.bp.blogspot.com/-hF8PH92aYT0/TnBxwuDdcwI/AAAAAAAAHMo/71umGutZhBY/s1600/Professional%2BBusiness%2BCard%2BDesign%2B1.jpg"></HEAD>\n<BODY>\nOptional page t
ext here.\n</BODY>\n</HTML>

您可以使用urllibrequests轻松获取内容,并使用BeautifulSouplxml解析HTML,以获取meta代码中的图片网址

答案 1 :(得分:1)

您好像正在使用html http-equiv重定向。要透明地使用Python处理重定向,请在服务器端使用HTTP 302响应标头。否则,您必须解析HTML并遵循重定向manually或使用类似mechanize的内容。

答案 2 :(得分:0)

正如答案所述:要么重定向到图像本身,要么从html中解析出网址。

关于前者,重定向,如果你正在使用nginx或HAproxy服务器端,你可以将X-Accel-Redirect设置为图像的uri,它将被适当地提供。有关详细信息,请参阅http://wiki.nginx.org/X-accel

答案 3 :(得分:0)

urllib2 urlopen函数默认遵循重定向3XX HTTP状态代码。但在你的情况下,你正在使用基于html标题的重定向,你将使用它来使用Bibhas提出的建议。