使用 urllib.urlretrieve() 保存图像
Save image with urllib.urlretrieve()
我正在尝试通过我的脚本访问以下 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')]
有谁知道为什么 'content-length' 是“0”?我认为这就是下载文件为空的原因。
我认为这是因为您抓取的图像不包含扩展名。例如,如果您 运行 此代码:
src = "http://i.imgur.com/2C7Csq6.png"
urllib.urlretrieve(src, "test.png")
PNG 文件有效,而且是完全相同的图像。我试过寻找方法来做到这一点,而不必上传到可以提供扩展的图像共享服务,但没有找到任何东西。我也试过将 .png
添加到原始 src
字符串,但这也没有用。我的猜测是这是一个特定于网站的问题。希望您能找到解决方法,祝您好运!
我找到了解决方法...截图
image_element = driver.find_element_by_id('chartImg')
src = image_element.get_attribute("src")
if src:
driver.get(src)
driver.save_screenshot('screen.png')
不知道是否有更好的方法,但这确实有效
我正在尝试通过我的脚本访问以下 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')]
有谁知道为什么 'content-length' 是“0”?我认为这就是下载文件为空的原因。
我认为这是因为您抓取的图像不包含扩展名。例如,如果您 运行 此代码:
src = "http://i.imgur.com/2C7Csq6.png"
urllib.urlretrieve(src, "test.png")
PNG 文件有效,而且是完全相同的图像。我试过寻找方法来做到这一点,而不必上传到可以提供扩展的图像共享服务,但没有找到任何东西。我也试过将 .png
添加到原始 src
字符串,但这也没有用。我的猜测是这是一个特定于网站的问题。希望您能找到解决方法,祝您好运!
我找到了解决方法...截图
image_element = driver.find_element_by_id('chartImg')
src = image_element.get_attribute("src")
if src:
driver.get(src)
driver.save_screenshot('screen.png')
不知道是否有更好的方法,但这确实有效