我写了一些代码从url下载一些文件,我把它们放在字典里,然而,当我运行脚本时,一切都运行正常,除了最后当它去下载文件时,它用其中一个名字创建了一个文件,然后我看到这个文件变得越来越大,然后又变小了。这个文件(mp4)总是无法播放/损坏,只有一个,它永远不会转移到另一个。知道是怎么回事吗?我的猜测是,不知何故,python一直下载不同的文件到一个本地文件和覆盖,我不明白为什么,虽然。
代码如下:
import sys
import os
import re
import urllib
import urllib.request
urlfilebytes = urllib.request.urlopen('http://www.pbs.org/wgbh/nova/sciencenow/download/index.html')
urlfile = urlfilebytes.read().decode('utf-8')
urls = re.findall(r'(http://www-tc.pbs.org/wgbh/nova/sciencenow/media/downloads/S+)"', urlfile)
print(urls)
names = re.findall(r'NSN_S+.mp4', str(urls))
print(names)
names_to_urls = {}
for name in names:
for url in urls:
names_to_urls[name] = url
print(names_to_urls)
for key in names_to_urls.keys():
for value in names_to_urls.values():
urllib.request.urlretrieve(value, key)
你想要的只是:
for name, url in zip(names, urls):
urllib.request.urlretrieve(url, name)
你不想要嵌套循环:你会得到URL和name的所有组合,而不仅仅是URL和name的匹配对。zip(names, urls)
取每个列表的第一项,然后取每个列表的第二项,依此类推