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都显示的是 ...
随机推荐
- [CSP-S模拟测试]:最大值(数学+线段树)
题目背景 $Maxtir$最喜欢最大值. 题目传送门(内部题128) 输入格式 第$1$行输入四个正整数$n,m,q$. 第$2$至$n+1$行中,第$i+1$行输入魔法晶石$i$的三种属性$(x_i ...
- 两种建立堆的方法HeapInsert & Heapify
参考 堆排序中两种建堆方法的比较 第一种方法HeapInsert 它可以假定我们事先不知道有多少个元素,通过不断往堆里面插入元素进行调整来构建堆. 它的大致步骤如下: 首先增加堆的长度,在最末尾的地方 ...
- Scrum立会报告+燃尽图 02
本次作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9912 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名 ...
- Ruby Programming学习笔记
#将ARGV[0]转换成正则表达式类型 pattern= Regexp.new(ARGV[0]) #Devise gem包 Devise是Ruby中使用最广泛的身份验证gem包之一.Devise为我们 ...
- 使用多个梯度下降的方式进行测试,同时使用ops.apply_gradient进行梯度的下降
1. ops = tf.train.GradientDescentOptimizer(learning_rate) 构建优化器 参数说明:learning_rate 表示输入的学习率 2.ops.co ...
- N2RR
一.背景 氨(NH 3)是一种新兴的能量载体,在液氨中含有17.6%(重量)的氢,而在甲醇中的含量为12.5%(重量),很可能成为未来氢能经济的有希望的候选者.然而,如果基于NH 3的肥料不足以养活世 ...
- nodejs之fs 模块
1.fs模块函数 * .fs.stat 检测是文件还是目录 * .fs.mkdir 创建目录 * .fs.writeFile 创建写入文件 * .fs.appendFile 追加文件 * .fs.re ...
- Jmeter(十一)测试监听
性能测试监控的主要任务是获取运行状态收集测试结果, 再对测试结果进行分析. 测试结果有事务响应时间,吞吐量及服务器硬件性能 , 数据库性能状态等等. Jmeter对长时间执行测试计划使用的监听器主要是 ...
- zk 两阶段提交(待完善)
zk 节点是一个 QuorumPeer,选举结束后,leader 和 follower 各自执行自己的逻辑: org.apache.zookeeper.server.quorum.QuorumPeer ...
- 十一:jinja2模板传参
从后台传参到模板,模板再渲染到前端 传参的时候,可以在html后面加上关键字传参,在模板里面用{{ 参数 }}使用即可,可以传多个参数 也可以使用**传参,取值的时候就直接取内容