使用正则、协程多任务爬取虎牙海量美女图片:
# 多任务实现下载图片
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()
多任务下载最明显的效果是爬取的所有图片在一瞬间同时出来 ,爬取后的效果: