1

我在我的网站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

4 回答 4

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>

您可以使用or轻松获取内容,并使用urlliborrequests解析 HTML 以从标签中获取图像 url。BeautifulSouplxmlmeta

于 2013-03-22T07:10:54.033 回答
1

您似乎正在使用 htmlhttp-equiv重定向。要使用 Python 透明地处理重定向,请在服务器端使用HTTP 302响应标头。否则,您将不得不手动解析 HTML 并遵循重定向或使用类似mechanize的东西。

于 2013-03-22T07:09:26.917 回答
0

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

关于前者,重定向,如果您使用的是 nginx 或 HAproxy 服务器端,您可以将 设置X-Accel-Redirect为图像的 uri,它将得到适当的服务。有关更多信息,请参阅http://wiki.nginx.org/X-accel

于 2013-03-22T07:15:33.777 回答
0

urllib2 urlopen 函数默认遵循重定向 3XX HTTP 状态码。但是在您的情况下,您使用的是基于 html 标头的重定向,您将使用 Bibhas 提议的重定向。

于 2013-03-22T07:24:31.710 回答