【问题标题】:Download multiple files in Python loop, only first works在 Python 循环中下载多个文件,只有第一个有效
【发布时间】:2018-04-18 16:35:27
【问题描述】:

我正在尝试从链接列表中下载一些视频。 文本文件中的每一行都是一个链接。 当我尝试循环下载所有视频时,只有第一个在工作。 视频大小为 60 - 100 MB。 之后循环继续,但文件为空。

感谢您的帮助。

 def download():
     name = 'video'
     a = 1
     with open('download.txt') as f:
         lines = f.readlines()
         for line in lines:
              url = line
              response = requests.get(url, stream=True)
              name = name + str(a)
              filename = name + '.mp4'
              with open(filename, 'wb') as f:
                  f.write(response.content)
              a = a + 1

【问题讨论】:

  • 你第一次在哪里声明“名字”?它在循环中显示为附加到自身,但我看不到它的初始化位置。也许这个名字只是在增长而不是被重置。
  • 对不起,我添加了它。它在我的代码中,所以这不是问题。循环创建具有唯一名称的文件,但它们只是空的,除了第一个。
  • 你能把文件中的内容截图发一下吗?
  • 这些链接真的有内容吗?
  • 每个文件都有 400 Bad Request 错误。当我打开它们时,链接是好的。尝试 time.sleep 但没有帮助。

标签: python python-3.x python-requests


【解决方案1】:
def download():
    name = 'video'
    a = 1
    with open('download.txt') as f:
        lines = f.readlines()
        for line in lines:
            urllib.request.urlretrieve(line.strip(), name + str(a) + ".mpg")
            a += 1

这段代码对我有用。

根据您的目的,您可能需要考虑安全性、稳健性(如果一次下载失败会发生什么情况?)、性能(并发性?)。

【讨论】:

  • 谢谢。现在只是出于个人和教学目的,但我会努力改进它。来自 jasonharper 的解决方案也有效,只是 download.txt 中的行形成错误。
猜你喜欢
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2020-12-27
  • 2022-08-12
  • 1970-01-01
  • 2021-07-16
  • 2021-07-01
  • 1970-01-01
相关资源
最近更新 更多