如何在Python中捕获重定向的URL

1 投票
4 回答
1363 浏览
提问于 2025-04-17 19:58

我在我的网站上创建了一个页面,地址是 http://shedez.com/test.html。这个页面会把用户重定向到我服务器上的一张jpg图片。

我想用一个Python脚本把这张图片复制到我的本地电脑上。我希望这个脚本先访问主网址,然后再获取图片的目标网址。

接着再复制这张图片。目前目标网址是写死在代码里的,但将来我会让它变得动态,因为我会使用地理编码来通过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

正如回答中提到的:你可以选择直接跳转到图片本身,或者从网页的代码中提取出图片的链接。

关于前者,也就是跳转,如果你在服务器上使用的是nginx或HAproxy,可以设置一个叫做 X-Accel-Redirect 的东西,把它指向图片的地址,这样就可以正确地提供图片了。想了解更多信息,可以查看这个链接:http://wiki.nginx.org/X-accel

1

你似乎在使用 HTML 的 http-equiv 重定向。为了在 Python 中更方便地处理重定向,建议在服务器端使用 HTTP 302 响应头。否则,你就得手动解析 HTML 并跟踪重定向,或者使用类似 mechanize 的工具。

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 标签中提取图片网址。

撰写回答