使用urllib.urlretrieve()保存图像

时间:2016-11-19 01:45:30

标签: python selenium urllib

我正在尝试通过我的脚本访问以下link并下载出现的图表。

我使用已接受的回复here来实现它但是当我尝试打开文件时,我收到错误:The file “test.png” could not be opened because it is empty.

这是我的代码段:

import urllib
image_element = driver.find_element_by_id('chartImg')
src = image_element.get_attribute("src")
if src:
    urllib.urlretrieve(str(src), "test.png")

接下来我尝试进一步调试并将代码更改为

if src:
    a, b = urllib.urlretrieve(str(src), "test.png")
    print a, b.items() 

给出了以下输出:

test.png
[('date', 'Sat, 19 Nov 2016 01:19:20 GMT'), ('connection', 'Keep-Alive'), ('content-length', '0'), ('server', 'BigIP')]

有谁知道为什么'内容长度'是' 0'?我认为这是下载文件为空的原因。

2 个答案:

答案 0 :(得分:1)

我认为这是因为您正在抓取的图片不包含扩展名。如果您运行此代码,例如:

src = "http://i.imgur.com/2C7Csq6.png"
urllib.urlretrieve(src, "test.png")

PNG文件有效,图像完全相同。我已经尝试过这样做的方法,而无需上传到图像共享服务,它可以提供扩展程序,但却找不到任何东西。我还尝试将.png添加到原始src字符串中,但这也不起作用。我猜这是一个特定于网站的问题。希望你能为此找到一个解决方法,祝你好运!

答案 1 :(得分:1)

我找到了一个解决方法......截取

    image_element = driver.find_element_by_id('chartImg')
    src = image_element.get_attribute("src")
    if src:
        driver.get(src)
        driver.save_screenshot('screen.png')

不知道是否有更好的方法,但这可以完成工作