python协程多任务爬取虎牙美女主播图片

  使用正则、协程多任务爬取虎牙海量美女图片,斗鱼也一样,只需将正则表达式中的内容换一下即可,由于斗鱼网站的变化,之前的正则已用不了,现贴出新的:

re.findall(r"https://[^(\s|\"|})]*?\.jpg",url_content)

1.首先打开百度搜索虎牙,进入虎牙官网:

python协程多任务爬取虎牙美女主播图片_第1张图片

点击颜值选项进入都是妹子的界面: 

python协程多任务爬取虎牙美女主播图片_第2张图片

2.鼠标单击右键,选择查看网页源码,如下:

python协程多任务爬取虎牙美女主播图片_第3张图片

3.ctrl+A全选,ctrl+C复制,在桌面新建文本文档打开,选择粘贴,ctrl+S保存,最后对该文件重命名,将后缀名改为html,将该文件复制到你的项目中就OK了。 

# 多任务实现下载图片
import urllib.request
import gevent
import re
from gevent import monkey

monkey.patch_all()  # gevent打补丁


# 图片下载操作
def download(img_name, img_url):
    req = urllib.request.urlopen(img_url)
    img_content = req.read()
    # 将文件放在项目下的pictures文件夹下
    with open("pictures/%s" % img_name, "wb") as f:
        f.write(img_content)


def main():
    # 读取网页中的源码内容,meinv.html是beauties网页的源码内容,我把它放在了我项目下面
    with open("meinv.html", "r", encoding='utf-8') as f:
        url_content = f.read()
    # 使用正则过滤出beauties图片的网址,保存到img_li列表中
    img_li = re.findall(r"https://huya.*?\.jpg", url_content)
    print(len(img_li))  # 打印出列表长度
    j = 0
    li = list() #创建一个空列表
    #创建所有的卵,添加到li列表中
    for i in img_li:  
        spawn = gevent.spawn(download, str(j) + ".jpg", i) 
        li.append(spawn)
        j += 1
    gevent.joinall(li) #将所有的卵放入joinall中实现多任务下载


if __name__ == '__main__':
    main()

多任务下载最明显的效果是爬取的所有图片在一瞬间同时出来 ,爬取后的效果:

 

 

你可能感兴趣的:(python高级)