多线程爬取页面图片

Posted dark-fire-liehuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程爬取页面图片相关的知识,希望对你有一定的参考价值。

详细见代码,在代码段有相应注释:

from multiprocessing import Pool
import requests
import re
import random


class dImg():
    def __init__(self):
        self.count = 0
        pass

    def run(self):
        self.userSearch = input(请输入你想要下载的图片:)
        self.userNum = int(input(你想要下载多少页面图片:))
        self.download()

    def processRun(self):
        self.userSearch = input(请输入你想要下载的图片:)
        self.userNum = int(input(你想要下载多少页面图片:))
        self.multiDownPage()

    def download(self):
        for item in range(self.userNum):
            self.downloadPage(item)

    def downloadPage(self, item):
        item = item + 1
        res = requests.get(https://pixabay.com/zh/photos/?q={}&pagi={}.format(self.userSearch, item))
        # (http.*?)表示获取以http开头的字符串
        pattern = re.compile(<div class="item".*?<img.*?src="(http.*?)".*?title="(.*?)">, re.S)
        result = re.findall(pattern, res.text)
        print(res.text)
        for item in result:
            # 请求相应链接的具体图片并保存到本地
            imgContent = requests.get(item[0])
            # 图片名随机数生成,保存图片要用二进制形式保存所有此处为wb
            # imgContent.content为请求到的图片内容
            ranNum = random.randint(0, 100000000)
            with open(./image/{}.jpg.format(ranNum), wb) as f:
                f.write(imgContent.content)
                print(已下载完:%s图 % ranNum)
                self.count = self.count + 1

    def multiDownPage(self):
        # 设置的进程数和输入下载页数一样
        p = Pool(self.userNum)
        # 在进程数为p下,非柱塞的一一执行self.userNum页数的任务
        for i in range(self.userNum):
            # 参数args=(i,)为一个元组,所以后面的逗号必须有,表示页数
            p.apply_async(self.downloadPage, args=(i,))
        p.close()
        # 暂停进程,即设置进程的间隔时间
        p.join()
        print(所有图片下载完毕)


if __name__ == __main__:
    # 实例化类,并调用其主函数
    a = dImg()
    # a.run()
    a.processRun()

 

以上是关于多线程爬取页面图片的主要内容,如果未能解决你的问题,请参考以下文章

python多线程爬取图片二

python小白学习记录 多线程爬取ts片段

Python网络爬虫四多线程爬取多张百度图片的图片

python爬虫 asyncio aiohttp aiofiles 单线程多任务异步协程爬取图片

Python多线程Threading爬取图片,保存本地

多线程下载图片