Python 多进程 一分钟下载二百张图片 是什么样子的体验
需要爬取国内某个网站,但是这个网站封ip,没办法,只能用代理了,然后构建自己的代理池,代理池维护了20条进程,
所用的网络是20M带宽,实际的网速能达到2.5M,考虑到其他原因,网速未必能达到那么多。爬虫对网速的要求挺高的。
首先把 URL 图片的链接 抓取下来 保存到数据库中去,然后使用多进程进行图片的抓取。
经过测试 开40个进程,一分钟能采集200张图片,但是开60个进程,图片下降到了一分钟120张。
注意: 抓取图片的时候,或者抓取视频的时候,一定要加上请求头,实现图片的压缩传输。
下面直接粘贴出来代码:
# coding:utf-8
from common.contest import * def save_img(source_url, dir_path, file_name,maxQuests= 11):
maxQuests =maxQuests headers = { "Host":"img5.artron.net",
"Connection":"keep-alive",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36",
"Accept":"image/webp,image/apng,image/*,*/*;q=0.8",
"Referer":"http://auction.artron.net/paimai-art5113610001/",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"zh-CN,zh;q=0.8", }
proxies = r.get(str(random.randint(1,10)))
proxies = {"http": "http://" + str(proxies)}
print "使用的代理是:",proxies
try:
response = requests.get(url=source_url, headers=headers,verify=False,proxies=proxies,timeout=15)
if response.status_code == 200:
if not os.path.exists(dir_path):
os.makedirs(dir_path)
total_path = dir_path + '/' + file_name with open(total_path, 'wb') as f:
for chunk in response.iter_content(1024):
f.write(chunk)
print "图片保存到本地"
return ""
else:
print "图片没有保存到本地"
return ""
except Exception as e:
print e
if maxQuests > 0 and response.status_code != 200:
save_img(source_url, dir_path, file_name, maxQuests-1) def getUpdataImage(item): item_imgurl = item['item_imgurl']
url = item_imgurl
item_href = item_imgurl
print "正在采集的 url 是",url filenamelist = url.split('/') filename1 = filenamelist[len(filenamelist) - 4]
filename2 = filenamelist[len(filenamelist) - 3]
filename3 = filenamelist[len(filenamelist) - 2]
filename4 = filenamelist[len(filenamelist) - 1] filename = filename1 + "_" + filename2 + "_" + filename3 + "_" + filename4 filenamestr = filename.replace('.jpg', '')
filenamestr = filenamestr.replace('.JPG', '')
filenamestr = filenamestr.replace('.JPEG', '')
filenamestr = filenamestr.replace('.jpeg', '')
filenamestr = filenamestr.replace('.png', '')
filenamestr = filenamestr.replace('.bmp', '')
filenamestr = filenamestr.replace('.tif', '')
filenamestr = filenamestr.replace('.gif', '') localpath = 'G:/helloworld/' + filenamestr save_localpath = localpath + "/" + filename
print "图片保存路径是:",save_localpath try:
result = save_img(url, localpath, filename,item_href) if result == "":
print "图片采集成功"
else:
print "图片采集失败" except IOError:
pass if __name__ == "__main__": time1 = time.time()
sql = """SELECT item_id, item_imgurl FROM 2017_xia_erci_pic """
resultList = select_data(sql)
print len(resultList)
pool = multiprocessing.Pool(60)
for item in resultList:
pool.apply_async(getUpdataImage, (item,))
pool.close()
pool.join()
Python 多进程 一分钟下载二百张图片 是什么样子的体验的更多相关文章
- python多进程断点续传分片下载器
python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...
- Office_PPT_让你一分钟完成上百张图片的快速保存
1 方式 修改PPT文件格式,由PPT修改为rar,再进行解压操作 进入到ppt->media中找到你在PPT为文件中使用的图片. 2 PPT北京图片下载网址 别样网:https://www.s ...
- Python中的多进程与多线程(二)
在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...
- 【Python从入门到精通】(二十五)Python多进程的使用
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...
- Python 多进程 多线程 协程 I/O多路复用
引言 在学习Python多进程.多线程之前,先脑补一下如下场景: 说有这么一道题:小红烧水需要10分钟,拖地需要5分钟,洗菜需要5分钟,如果一样一样去干,就是简单的加法,全部做完,需要20分钟:但是, ...
- Qt+Python开发百度图片下载器
一.资源下载地址 https://www.aliyundrive.com/s/jBU2wBS8poH 本项目路径:项目->收费->百度图片下载器(可试用5分钟) 安装包直接下载地址:htt ...
- python多进程详解
目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...
- 一篇文章搞定Python多进程(全)
1.Python多进程模块 Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Proce ...
- 进击的Python【第五章】:Python的高级应用(二)常用模块
Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigPar ...
随机推荐
- 【Storm】学习笔记
Storm 1 基本概念 1.1 分布式.可扩展.高容错.实时流处理.跨语言 1.2 应用场景 1.2.1 实时分析 1.2.2 在线机器学习 1.2.3 分布式RPC 1.2.4 ETL数据抽取 1 ...
- Cognos Report Studio 链接查询需要注意的地方2
在Report Studio里面用SQL设计报表,查询2,查询3 要链接一般按条件 a1=b1 在选择链接方式需要注意的地方: 默认链接 外部链接 需要设置打开FM,打开报表设计引用的数据包(FM- ...
- linux下线刷硬盘
Linux系统往往有添加磁盘不够的情况,这时就需要添加新的硬盘.一般情况下需要重启服务器,这里我们来使用线刷方式读取Linux新增硬盘 1.添加磁盘后fdisk -l磁盘没有显示 2.查看主机总线号 ...
- T-SQL 之 游标
游标是面向行的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能. 在性能上,游标会占有更多的内存,减少可用的并发,占用带宽,锁定资源,当然还有更多的代码量. 用一个比喻来说明为什么游标会 ...
- IOS学习笔记45--UITableView性能优化
说实话,面试的时候已经被问到几次这个问题,然后就搜索了一下,看到了这篇优化文章,感觉不错,转来日后作为一种UITableView优化的方法. 使用不透明视图. 不透明的视图可以极大地提高渲染 ...
- Oracle体系结构一(学习笔记)
总体结构分为三个部分:SGA,PGA,FILE文件 按功能分: 存储结构 存储结构对应关系 主要文件: 数据文件: 每个数据文件只与一个数据库相关联 一个表空间可以包含一个或者多个数据文件 一个数 ...
- Android:子线程向UI主线程发送消息
在Android里,UI线程是不同意被堵塞的.因此我们要将耗时的工作放到子线程中去处理. 那么子线程耗时处理后要如何通知UI线程呢? 我们能够在UI主线程中创建一个handler对象,然后通过重写其h ...
- Ubuntu vim+ ctags(包括系统函数) + taglist 配置
阅读大型代码,我们常常须要打开非常多的代码文件,搜索各种定义.windows下用惯了ide的朋友.转战Linux的时候可能会认为非常难受,找不到合适的阅读工具. 事实上万能的vim就能够实现. 以下介 ...
- Form.ShowDialog(this)
有时遇到一种情况,.ShowDialog()不显示.也不报错.例如以下: <span style="font-size:14px;"> private void but ...
- 函数响应式编程(FRP)框架--ReactiveCocoa
由于工作原因,有段时间没更新博客了,甚是抱歉,只是,从今天開始我又活跃起来了,哈哈,于是决定每周更新一博.大家互相学习.交流. 今天呢.讨论一下关于ReactiveCocoa,这个採用函数响应式编程( ...