Python面试题--第71道题目--通过url使用多线程下载图像文件,并保存--2022年04月26日

目录

一、题目要求:

二、实操代码演示:

1、urls.txt文件

2、读取urls.txt中每一行url,添加到列表中。

3、创建线程类。

4、创建下载图片的函数,以方便线程类使用。


一、题目要求:

在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()

执行结果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值