Python面试题--第71道题目--通过url使用多线程下载图像文件,并保存--2022年04月26日
时间:2023-08-12 16:37:02
目录
一、题目要求:
二、实操代码演示:
1、urls.txt文件
2、读取urls.txt中每一行url,添加到列表中。
3.创建线程类。
为方便线程类使用,创建下载图片的函数。
一、题目要求:
在urls.txt文件中包含多个图像Url,一行一个Url,请使用多线程下载这些图像文件Url顺序保存为0.jpg、1.jpg、2.jpg,依此类推。
二、实操代码演示:
1、urls.txt文件
https://img10.360buyimg.com/n1/jfs/t23722/106/2427071620/128371/2d7b202a/5b7e6e0bNc42f7eea.jpg http://img3m7.ddimg.cn/7/6/1468712527-1_b_1.jpg http://img3m8.ddimg.cn/87/34/25163808-1_b_1.jpg http://img3m8.ddimg.cn/11/8/23830598-1_b_1.jpg http://img3m1.ddimg.cn/71/7/23043311-1_b_1.jpg
2、读取urls.txt中每一行url,添加到列表中。
3.创建线程类。
为方便线程类使用,创建下载图片的函数。
from django import http from urllib3 import * import threading http = PoolManager() disable_warnings() f = open(r'D:\python_work\interview\mianshi100\urls.txt','r') # window尽量不要在系统中使用相对路径,需要使用绝对路径,有时会认为不是在本目录下 # 带有反斜杠的时候,字符串前main加上r,不会被认为是转义符。 # f = open('url.txt','r') urllist = [] while True: url = f.readline() if url == '': break urllist.append(url.strip()) f.close() print(urllist) class DownloadTread(threading.Thread): def __init__(self, func, args): super().__init__(target=func,args=args) def download(filename,url): response = http.request('GET',url) f = open(filename,"wb") # 因为图片是二进制的,加上b”。 f.write(response.data) f.close() print('<',url,'>下载完成。') for i in range(len(urllist)): thread = DownloadTread(download,(str(i) '.jpg',urllist[i])) thread.start()
执行结果如下: