目录
一、题目要求:
在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、创建线程类。
4、创建下载图片的函数,以方便线程类使用。
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()
执行结果如下: