Python 2.7
Ubuntu 12.04
我正在尝试组装一个图像刮刀,我之前没有遇到任何问题,但是现在我已经陷入困境了。
我从网页或用户的任何地方获取图像链接列表,我们假设它们是有效的链接。
我正在抓取的网站是imgur,有些链接不起作用,因为我没有添加对它们的支持(单个文件),我有代码从相册页面获取每个图像的链接,它起作用并返回如下链接:
http://i.imgur.com/5329B8H.jpg #(intentionally broken link)
我在实际程序中使用image_download函数:
def image_download(self, links):
for each in links:
url = each
name = each.split('/')[-1]
r = requests.get(url, stream=True)
with open(name, 'wb') as f:
for chunk in r.iter_content(1024):
if not chunk:
break
f.write(chunk)
image_download函数,因为我有测试它自己运行:
def down():
links = ['link-1', 'link-2']
for each in links:
name = each.split('/')[-1]
r = requests.get(each, stream=True)
with open(name, 'wb') as f:
for chunk in r.iter_content(1024):
if not chunk:
break
f.write(chunk)
现在就是这样,第二个就可以了。 他们都采取相同的意见,他们都做同样的事情。 第一个 返回一个具有正确名称和扩展名的文件,但文件大小不同,比如960b而不是第二个返回大约200kb文件的文件。
当我打印请求时都返回200的响应,我尝试在不同的点打印输出,据我所知,它们以完全相同的方式操作完全相同的数据,他们只是没有给出相同的信息。
这里发生了什么?
答案 0 :(得分:1)
您需要再次缩进f.write(chunk)
。您现在只是将最后一个块写入文件。
更正的功能如下所示:
def image_download(self, links):
for each in links:
url = each
name = each.split('/')[-1]
r = requests.get(url, stream=True)
with open(name, 'wb') as f:
for chunk in r.iter_content(1024):
if not chunk:
break
f.write(chunk) #This has been indented to be in the for loop.