async 异步抓取 花瓣网高清大图 30s爬取500张
废话 不多说,直接上代码,不懂得看注释
先安装 pip install aiohttp
"异步抓取花瓣网图片" # pip install aiohttp
import requests
import aiohttp
import asyncio
import time
import os headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36',
"X-Request": "JSON",
"Accept": "application/json",
"X-Requested-With": "XMLHttpRequest"
} def get_image_urls():
"""获取图片链接"""
print('开始获取图片链接,请耐心等待......')
image_id = 2551285279
for page in range(1,26):
url = "https://huaban.com/boards/41743806/?jzwfs8ej&max="+ str(image_id) +"&limit=20&wfl=1"
response = requests.get(url,headers=headers).json()
pins = response['board']['pins']
end_pins_id = pins[-1]['pin_id']
for i in pins:
key = i['file']['key']
urls.append('http://hbimg.huabanimg.com/'+key)
image_id = end_pins_id # 下一页url中需要的参数 #特殊的函數:该函数调用后,函数内部的程序语句不会被执行,但是该函数调用会返回一个协程对象
async def get_audio_data(url):
#使用aiohttp进行请求发送
#实例化了一个发送网络请求的对象
async with aiohttp.ClientSession() as s:
#该函数内部的异步操作必须使用await进行修饰
async with await s.get(url=url,headers=headers) as response:
audio_data = await response.read() #read()返回的是二进制形式的响应数据
return {'data':audio_data,'url':url} #任务对象的回调函数,进行数据的持久化存储
def saveData(task):
dic_obj = task.result()
name = dic_obj['url'].split('/')[-1]
data = dic_obj['data']
image_dir = 'images'
if not os.path.exists(image_dir):
os.mkdir(image_dir)
with open(os.path.join(image_dir,name) + '.jpg','wb') as fp:
fp.write(data)
print(name+'下载完毕!') if __name__ == '__main__':
start_time = time.clock()
urls = []
tasks = []
get_image_urls()
for url in urls:
#调用该特殊函数,让其返回一个协程对象
c = get_audio_data(url)
#将协程对象封装到任务对象中
task = asyncio.ensure_future(c)
# 给任务对象绑定回调函数
task.add_done_callback(saveData)
#将任务对象添加到列表中
tasks.append(task)
#创建一个事件循环对象
loop = asyncio.get_event_loop()
#将任务对象列表注册到事件循环对象中,并且开启事件循环
loop.run_until_complete(asyncio.wait(tasks))
end_time = time.clock()
print('抓取{}张图片,共计用时{}秒'.format(len(tasks),end_time-start_time))
注:window最大线程数 512,所以任务数不要超过这个值,否则 抛出异常

async 异步抓取 花瓣网高清大图 30s爬取500张的更多相关文章
- Python抓取花瓣网高清美图
		
一:前言 嘀嘀嘀,上车请刷卡.昨天看到了不错的图片分享网——花瓣,里面的图片质量还不错,所以利用selenium+xpath我把它的妹子的栏目下爬取了下来,以图片栏目名称给文件夹命名分类保存到电脑中. ...
 - python爬虫实战(二)--------千图网高清图
		
相关代码已经修改调试----2017-3-21 实现:千图网上高清图片的爬取 程序运行20小时,爬取大约162000张图片,一共49G,存入百度云.链接:http://pan.baidu.com/s/ ...
 - 使用nodejs爬取和讯网高管增减持数据
		
为了抓取和讯网高管增减持的数据,首先得分析一下数据的来源: 网址: http://stockdata.stock.hexun.com/ggzjc/history.shtml 使用chrome开发者工具 ...
 - GoLang爬取花瓣网美女图片
		
由于之前一直想爬取花瓣网(http://huaban.com/partner/uc/aimeinv/pins/) 的图片,又迫于没时间,所以拖了很久. 鉴于最近在学go语言,就刚好用这个练手了. 预览 ...
 - WPF 异步加载高清大图
		
不管什么东西,但凡太大了,总是让人又爱又恨啊!(很有道理的样子,大家鼓掌└( ̄  ̄└)(┘ ̄  ̄)┘) 猿:老板,现在这社会啊,真是浮躁啊,之前还是什么1080P,然后就到了2K,现在又到了4K……他 ...
 - Python爬虫-爬取科比职业生涯高清图集
		
前面学习了Python爬取豆瓣电影Top250的数据,爬取的信息是电影信息的文本信息,但是在互联网上流行的图片才有更大的吸引力,本篇我们来使用python爬取网页上的图片并保存在本地硬盘上,很兴奋吧, ...
 - python 爬取王者荣耀高清壁纸
		
代码地址如下:http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...
 - python妹子图爬虫5千张高清大图突破防盗链福利5千张福利高清大图
		
meizitu-spider python通用爬虫-绕过防盗链爬取妹子图 这是一只小巧方便,强大的爬虫,由python编写 所需的库有 requests BeautifulSoup os lxml 伪 ...
 - IOS 多个UIImageView 加载高清大图时内存管理
		
IOS 多个UIImageView 加载高清大图时内存管理 时间:2014-08-27 10:47 浏览:59人 当我们在某一个View多个UIImageView,且UIImageView都显示的是 ...
 
随机推荐
- Alibaba DataX 源码编译
			
Alibaba DataX 源码编译 标签(空格分隔): ETL DataX简介 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负 ...
 - 20191017-2 alpha week 2/2 Scrum立会报告+燃尽图 01
			
本次作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9798 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名: ...
 - LeetCode 93. 复原IP地址(Restore IP Addresses)
			
题目描述 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&qu ...
 - laravel 发送html邮件是a标签中的url不显示问题
 - 1.5 log4j使用教程
			
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...
 - django写原生sql语句
			
执行自定义SQL语言: from django.db import connection  cursor=connection.cursor()  # 插入操作 cursor.execute(&q ...
 - HTML基础之DOM
			
DOM(Document Object Model 文档对象模型) 一个web页面的展示,是由html标签组合成的一个页面,js是一门语言,dom对象实际就是将html标签转换成了一个文档对象.可以通 ...
 - 子系统 安装vsftpd
			
1.安装命令 sudo apt install vsftpd 2.为FTP添加用户,使用sudo useradd -m sunftp命令添加一个sunftp的用户 3. 授权文件夹 chmod 77 ...
 - 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
			
目前这里能调用是因为,在service的实现类里面,new了一个dao的对象 正常情况下 这里不应该是new一个对象,应该等于null或为空 设置为空侯再运行就会报错 出错的原因是这里为null 需要 ...
 - 快速安装pycharm,最详细的pycharm安装图文教程
			
大家都知道python的开发工具Pycharm吧,它是由JetBrains打造的一款Python IDE,它功能强大,已经是python开发者使用最多的编辑工具.首先,它支持多平台(Linux.WIn ...