欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬虫学习记录-多线程爬取图片

程序员文章站 2022-07-14 11:02:29
...

思路:
找到所有图片地址,开启多线程下载;
导入模块:

import requests
import threading
import os
import  time
from bs4 import BeautifulSoup

首先,打开网址;
点击每个图片里面是图集;
这里用的是BeautifulSoup找到href里的内容,把完整地址拼接出来,放到一个列表里;
这个页面有7页,分析一下网址,发现只有最后的数字改变;
爬虫学习记录-多线程爬取图片
然后,我们进入图片页面:爬虫学习记录-多线程爬取图片
再用BeautifulSoup找到src里的内容,拼接成完整的图片地址;alt里的内容对应图片地址,创建字典;
这里有好多页:
爬虫学习记录-多线程爬取图片
用上面的方法做,找到地址拼接完整,得到所有的图片地址;
最后,多线程下载

class DownPic(threading.Thread):
    #下载图片
    def run(self):
        print("图片下载线程启动")
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'
        }
        while True:
            g_lock.acquire()
            if len(url_img)==0:
                g_lock.release()
                continue
            else:
                img = url_img.pop().items()
                g_lock.release()
                path = list(img)[0][0]
                is_exists = os.path.exists(path)
                if not is_exists:
                    os.makedirs(path)
                    print(path+'目录创建成功')
                else:
                    pass
                filename = path +"/"+ list(img)[0][1].split('/')[-1]
                if os.path.exists(filename):
                    continue
                else:
                    try:
                        response = requests.get(list(img)[0][1],headers=headers)
                        with open(filename,'wb') as f :
                            f.write(response.content)
                            print("打印成功")
                    except:
                        print("储存失败")

得到图集地址和图片地址都用到了多线程;
GitHub