import urllib.request
def Download(url, file_name):
urllib.request.urlretrieve(url, file_name)
f = open("links.txt", "r")
lines = f.readlines()
for line in lines:
for x in range (1, 5):
filenaame = x
cut_string = line.split('?$')
new_string = cut_string[0]
numerator = new_string.split('/1/')
separator = ''
link = (separator.join(numerator[0] + "/{}/".format(x) + numerator[1]))
file_name = link.split('/{}/'.format(x))
file_name = file_name[1]
file_name = file_name.split('.')
file_name = (separator.join(file_name[0] + "{}".format(filenaame)))
filenaame =+ 1
print("Downloading: {}".format(file_name))
Download(link, filenaame)
错误:
Traceback (most recent call last):
File "C:\python\downloader\rr.py", line 29, in <module>
Download(link, filenaame)
File "C:\python\downloader\rr.py", line 5, in Download
urllib.request.urlretrieve(url, file_name)
File "C:\python\lib\urllib\request.py", line 258, in urlretrieve
tfp = open(filename, 'wb')
OSError: [WinError 6] The handle is invalid
我已经搜索了很多关于此的内容,并且在每个结果中我都发现这个人正在使用子流程模块,而我并不是这样,这使得它变得更加困难。
代码用于下载图像。它会成功下载第一个,然后崩溃。任何人都知道造成错误的原因是什么?我还是个初学者。
答案 0 :(得分:0)
您已将计数器作为第二个参数传递。最后,该函数将其用作文件名,将下载的数据复制到。
通过传递一个整数,你可以启用&#34;传递一个低级文件描述符&#34;到open
:
文件是字符串或字节对象,给出要打开的文件的路径名(绝对或相对于当前工作目录)或要包装的文件的整数文件描述符。
但是文件描述符并不存在(幸运的是!)
让我们在这里重现这个问题:
>>> open(4,"rb")
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
OSError: [Errno 9] Bad file descriptor
修复显然是:
Download(link, file_name)
(我建议您将filenaame
计数器重命名为更有意义的内容,避免出现类似的错误。
答案 1 :(得分:0)
在这一行,
urllib.request.urlretrieve(url, file_name)
此处 file_name 应该是字符串,因此在调用 Download(link,filenaame)之前,请使整数filenaame成为字符串try。
Download(link, str(filenaame))
用于下载图像的示例
def download_img(url):
name = random.randrange(100,1000)
full_name = str(name)+ ".jpg"
urllib.request.urlretrieve(url, full_name)
download_img("http://images.freeimages.com/images/small-previews/25d/eagle-1523807.jpg")