Python图像scraper在单独运行时有效,但在从其他地方调用时则无法运行

时间:2013-11-19 12:01:55

标签: python

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的响应,我尝试在不同的点打印输出,据我所知,它们以完全相同的方式操作完全相同的数据,他们只是没有给出相同的信息。

这里发生了什么?

1 个答案:

答案 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.