生活这么无聊,保存点小姐姐图片作为调料吧(多线程版本)

简介: 生活这么无聊,保存点小姐姐图片作为调料吧(多线程版本)

文章目录

0、缘起

自从【生活这么无聊,保存点小姐姐的图片来点调料吧】出来,不少大哥都跟我反映下载速度太慢了,所以趁着今天摸鱼时间,补充一下多线程版本吧。

使用的技术栈python3, re, BeautifulSoup、python2的_thread、python3的threading

目标网站: https://www.umei.net/p/gaoqing/cn/

不了解多线程的,可以先了解一下下哦,推荐:Python3 多线程

免责声明:仅用于学习,请勿商用!!!!

1. 线程关系拓扑

2. 代码实现

import requests
import re
from bs4 import BeautifulSoup
import _thread              # python2 的多线程
import threading            # python3 的多线程
imgs = []               # 保存a链接的列表
ans_imgs = []           # 保存图片大图的列表
cnt = 0
def downloadImg(cc):
    while(len(ans_imgs)==0):
        pass
    k = ans_imgs.pop()
    b = requests.get(str(k))
    if(b.status_code==200):
        with open('./pics/'+str(cc)+'.jpg','wb+') as f:
            f.write(b.content)
'''
target: 获取图片的大图链接
params: a链接的url
'''
class get_ans_imgs( threading.Thread ):
    def __init__( self ):
        threading.Thread.__init__(self)
    def run( self ):
        k = imgs.pop()
        src= str(url + k)
        ans = requests.get( src )
        if(ans.status_code==200):
            soup1 = BeautifulSoup(ans.content, 'html5lib')
            imgBody = soup1.select('.ImageBody img')
            print(imgBody)
            # 获取大图的src
            obj = re.search('.*?src="(.*?)"', str(imgBody), re.M | re.I )
            ans_imgs.append(  obj.group(1))
url = 'https://www.umei.net/p/gaoqing/cn/'
r = requests.get(url)
# with open('./meinv.html','wb+') as f:
#     f.write(r.content)
if(r.status_code == 200 ):
    soup = BeautifulSoup(r.content, 'html5lib')
    # 获取img外面的a标签
    aList = soup.select('.TypeBigPics')
    for item in aList:
        # print( type (item) )
        obj = re.search('.*?\/cn\/(.*?)".*', str(item), re.M | re.I )
        imgs.append( str( obj.group(1)) )
print(imgs)
while(  len(imgs)!=0 ):
    thread1 = get_ans_imgs(  )
    thread1.start()
    cnt += 1
    print("正在下载第" + str(cnt) + "张图片")
    _thread.start_new_thread( downloadImg(cnt))
    # # 保存大图
print("完结撒花")

3. 注意

在启动程序之前要先创建一个pics文件夹哦,或者自己更改一下下路径。

4. 结果

少年不宜就不放啦

相关文章
|
3月前
|
存储 NoSQL Redis
Redis 新版本引入多线程的利弊分析
【10月更文挑战第16天】Redis 新版本引入多线程是一个具有挑战性和机遇的改变。虽然多线程带来了一些潜在的问题和挑战,但也为 Redis 提供了进一步提升性能和扩展能力的可能性。在实际应用中,我们需要根据具体的需求和场景,综合评估多线程的利弊,谨慎地选择和使用 Redis 的新版本。同时,Redis 开发者也需要不断努力,优化和完善多线程机制,以提供更加稳定、高效和可靠的 Redis 服务。
84 1
|
4月前
|
NoSQL 网络协议 Unix
1)Redis 属于单线程还是多线程?不同版本之间有什么区别?
1)Redis 属于单线程还是多线程?不同版本之间有什么区别?
115 1
|
6月前
|
存储 缓存 NoSQL
Redis性能优化问题之优化 Redis fork 耗时严重的问题,如何解决
Redis性能优化问题之优化 Redis fork 耗时严重的问题,如何解决
|
5月前
|
算法 Java
JDK版本特性问题之想控制 G1 垃圾回收器的并行工作线程数量,如何解决
JDK版本特性问题之想控制 G1 垃圾回收器的并行工作线程数量,如何解决
|
7月前
|
算法 Java 大数据
Java不同版本的多线程开发:进化之路
Java不同版本的多线程开发:进化之路
64 1
|
7月前
|
数据采集 XML 存储
【Python实战】Python多线程批量采集图片
【Python实战】Python多线程批量采集图片
|
8月前
|
Java Linux
【linux线程(三)】生产者消费者模型详解(多版本)
【linux线程(三)】生产者消费者模型详解(多版本)
|
8月前
|
Java C++
线程池-手写线程池C++11版本(生产者-消费者模型)
线程池-手写线程池C++11版本(生产者-消费者模型)
195 0
|
8月前
|
Java Linux C语言
线程池-手写线程池Linux C简单版本(生产者-消费者模型)
线程池-手写线程池Linux C简单版本(生产者-消费者模型)
89 0
用python多线程抓取网站图片,速度极快
用python多线程抓取网站图片,速度极快