从列表中的URL保存图像 - Python 简单
我现在有一个列表,里面存着从网页上获取的所有图片链接,这个列表叫做 imgs_urls
。我想知道怎么把这些图片都保存下来,而网页上的图片数量是会变化的。
在 imgs_urls
这个列表里,根据我运行的报告,链接的数量可能会有很多。现在我可以通过调用列表中的一个项目来实现这个功能。
html = lxml.html.fromstring(data)
imgs = html.cssselect('img.graph')
imgs_urls = []
for x in imgs:
imgs_urls.append('http://statseeker%s' % (x.attrib['src']))
lnum = len(imgs_urls)
link = urllib2.Request(imgs_urls[0])
output = open('sla1.jpg','wb')
response = urllib2.urlopen(link)
output.write(response.read())
output.close()
这个列表里的链接都是完整的链接。如果把它打印出来,可能会像这样:
img_urls = ['http://site/2C2302.png','http://site/2C22101.png','http://site/2C2234.png']
我想的基本思路是这样的,但我知道语法不对:
lnum = len(imgs_urls)
link = urllib2.Request(imgs_urls[0-(lnum)])
output = open('sla' + (0-(lnum)).jpg','wb')
response = urllib2.urlopen(link)
output.write(response.read())
output.close()
这样的话,它就能保存所有的图片,文件名可能会像这样:
sla1.png, sla2.png, sla3.png, sla4.png
有没有什么好主意?我觉得用循环可能能解决这个问题,但我不知道怎么根据 lnum
里的数字来增加保存的 sla.jpg
的次数,然后再用同样的方法增加 output
列表里的数字。
1 个回答
0
我喜欢用Python的enumerate
这个功能,它可以让我在获取可迭代对象的值时,同时得到它的索引。这样我就可以自动给输出的文件名加上递增的数字。像下面这样应该就能实现:
import urllib2
img_urls = ['http://site/2C2302.png','http://site/2C22101.png','http://site/2C2234.png']
for index, url in enumerate(img_urls):
link = urllib2.urlopen(url)
try:
name = "sla%s.jpg" % (index+1)
with open(name, "wb") as output:
output.write(link.read())
except IOError:
print "Unable to create %s" % name
你可能还需要处理其他的异常,比如权限错误,但这应该能让你入门。需要注意的是,我把索引加了1,因为索引是从0开始的。
另外,你可以参考: