从 URL 在 python 中调用的方法中检索图像

Retrieve image from method called by URL in python

我正在尝试使用 python 检索通过给定 URL 返回的图像,例如这张:

http://fundamentus.com.br/graficos3.php?codcvm=2453&tipo=108

我正在尝试使用 urllib 检索方法来执行此操作:

import urllib

urlStr = "http://fundamentus.com.br/graficos3.php?codcvm=2453&tipo=108"
filename = "image.png"
urllib.urlretrieve(urlStr,filename)

我已经将此用于其他 URL(例如 http://chart.finance.yahoo.com/z?s=CMIG4.SA&t=9m),但对于第一个它不起作用。

有人知道如何为给定的 URL 制作这个吗? 注意:我使用的是 Python 2.7

您需要使用可以通过 requests:

进行的会话
import requests

with requests.Session() as s:
    s.get("http://fundamentus.com.br/graficos.php?papel=CMIG4&tipo=2")
    with open("out.png", "wb") as f:
       f.write(s.get("http://fundamentus.com.br/graficos3.php?codcvm=2453&tipo=108").content)

它在您的浏览器中工作,因为您访问了图像所在的初始页面,因此设置了任何必要的 cookie。

虽然比@PadraicCunningham 的回复更冗长。这也应该可以解决问题。我 运行 遇到了类似的问题(主机只支持某些浏览器),所以我不得不开始使用 urllib2 而不是仅仅使用 urllib。非常强大,是 python.

附带的模块

基本上,您在初始请求期间捕获所有需要的信息,并将其添加到您的下一个请求和后续请求中。 requests 模块似乎在幕后为您完成了所有这些工作。要是这些年我早知道就好了...

import urllib2

urlForCookie = 'http://fundamentus.com.br/graficos.php?papel=CMIG4&tipo=2'
urlForImage = 'http://fundamentus.com.br/graficos3.php?codcvm=2453&tipo=108'

initialRequest = urllib2.Request(urlForCookie)
siteCookie = urllib2.urlopen(req1).headers.get('Set-Cookie')

imageReq = urllib2.Request(urlForImage)
imageReq.add_header('cookie', siteCookie)

with open("image2.pny",'w') as f:
        f.write(urllib2.urlopen(req2).read())
        f.close()