使用多线程爬虫爬取图片 设置守护进程

9 篇文章 0 订阅
3 篇文章 0 订阅
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('完毕')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值