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

本文档介绍了一个Python多线程下载图片的程序,使用requests、BeautifulSoup和threading库,目标网站为https://www.umei.net/p/gaoqing/cn/。首先解析网页获取图片链接,然后通过多线程下载图片,提高下载速度。请注意,代码仅供学习,不可用于商业用途。
摘要由CSDN通过智能技术生成

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. 结果

少年不宜就不放啦

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员三木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值