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都显示的是 ...
随机推荐
- R_Studio中对xls文件学生总成绩统计求和
我们发现这张xls表格是没有学生总分的,在xls文件中计算学生总分嫌麻烦时,可以考虑在R Studio中自定义R Script脚本来解决实际问题(计算每个学生的总成绩) .xls数据表中的数据(关键信 ...
- [CSP-S模拟测试]:多维网格(组合数学+容斥)
题目传送门(内部题138) 输入格式 输入数据第一行为两个整数$d,n$. 第二行$d$个非负整数$a_1,a_2,...,a_d$. 接下来$n$行,每行$d$个整数,表示一个坏点的坐标.数 ...
- for循环遍历对比
1.for(var i=0; i<10; i++):遍历数组 var arr = ['11', '22']; for(var i=0; i<arr.length;i++){ console ...
- 为Windows编译libobjc2(通过交叉编译的方式)
前提:Linux系统.git.clang-8.g++-mingw-w64-x86-64.gobjc++-mingw-w64-x86-64. 一.下载源代码 git clone https://gith ...
- DPM(物体检测)
1.DPM(物体检测流程) 1.计算DPM特征图 2.计算响应图 3.使用SVM对响应图进行分类 4.对最后的选框做局部检测识别 DPM的梯度提取方向,将图片中的四个区域进行区分,将有符号梯度方向从0 ...
- 自定义View等级滑动条的实现
package com.loaderman.beautyseekbarviewdemo; import android.os.Bundle; import android.support.v7.app ...
- 【flask】处理表单数据
表单数据的处理涉及很多内容,除去表单提交不说,从获取数据到保存数据大致会经历以下步骤: 解析请求,获取表单数据. 对数据进行必要的转换,比如将勾选框的植转换为Python的布尔值. 验证数据是否符合 ...
- http详解之post 2
-----------------------post请求示例----------------#请求行POST https://re.csdn.net/csdnbi HTTP/1.1 #请求头部开始H ...
- 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制
创建新项目 复制上一个pom.xml的内容.依赖和打包的方式 再复制src的代码过来 bean.xml.多导入context的声明 Service的实现类增加注解 dao的set方法删掉 通过Auto ...
- django 视图常用操作
获取参数. 类型是QueryDict https://www.cnblogs.com/zhaoyang-1989/p/11989515.html request.POST.get('参数名') req ...