import requests
import threading
import queue
urls = [
'http://cms-bucket.nosdn.127.net/2018/10/16/10e36050547445f6b8972daf7373a222.jpeg',
'http://kwcdn.000dn.com/swfs/59/39972xmyj0206/pm.jpg',
'http://pic-bucket.nosdn.127.net/photo/0008/2018-10-14/DU48KHUS2FKJ0008NOS.jpg',
'http://cms-bucket.nosdn.127.net/2018/10/16/b3a3fab2d65a41b79e0764727ae6d179.jpeg',
'http://cms-bucket.nosdn.127.net/2018/10/15/92cbe61fc5ec40ab94f5d2f0ed867718.jpeg',
'http://static.mx.jzyx.com/themes/v1.9/ad/v24/feature2.jpg',
'https://webinput.nie.netease.com/img/hy/icon.png',
'https://nie.res.netease.com/r/pic/20180807/3c70afb1-074e-453c-8f57-dfd1b6087fbf.png',
'https://nie.res.netease.com/r/pic/20181016/6b26e033-02fe-4c21-a10c-7eb04a24a612.jpg',
'http://img0.imgtn.bdimg.com/it/u=19453856,4281427172&fm=26&gp=0.jpg',
'http://game.gtimg.cn/images/lol/v3/index/s8/bg.jpg',
]
tasks = queue.Queue()
for url in urls:
tasks.put(url)
def saveImg(name,url):
imgname = url.split('/')[-1]
with open('img/'+imgname,'wb') as f:
try:
resp = requests.get(url)
imgcontent = resp.content
f.write(imgcontent)
print('线程{}保存{}成功'.format(name,imgname))
except:
print('线程{}保存{}失败'.format(name, imgname))
class Work(threading.Thread):
def __init__(self,name,tasks):
super().__init__()
self.tasks = tasks
self.name = name
def run(self):
while True:
# 设置为True比较方便。可以不断取出队列中数据
# 而因为守护线程所以程序结束时线程自动结束
url = self.tasks.get()
saveImg(self.name,url)
self.tasks.task_done()
if __name__ == '__main__':
for i in range(3):
t = Work(i, tasks)
# 设置为守护线程时。可以保证主线程结束时。守护线程自动结束
t.setDaemon(True)
t.start()
tasks.join()
# 队列阻塞 队列中任务执行完毕后才回向下执行
print('完毕')
使用多线程爬虫爬取图片 设置守护进程
最新推荐文章于 2020-11-26 03:17:13 发布