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 ...
随机推荐
- [Node.js]25. Level 5. Route params
Create a route that responds to a GET request '/quotes/<name>', then use the param from the UR ...
- 【statistics】查看2018.4.25日理想论坛某ID在一天中的活跃情况
用于统计的sum.py代码: import re import pymysql # 入口函数 def main(): dic={'00':0,'01':0,'02':0,'03':0,'04':0,' ...
- swift学习之元组
元组在oc中是没有的.在swift中是新加的,学oc数组概念时还在想既然能够存储同样类型的元素,那不同类型的元素有没有东西存储呢,答案非常悲伤,oc没有元组这个概念.只是swift中加入了这个东西,也 ...
- ZH奶酪:Ubuntu启动/重启/停止apache服务
Start Apache 2 Server /启动apache服务 # /etc/init.d/apache2 start or $ sudo /etc/init.d/apache2 start Re ...
- VC操作MPP文件
1.背景简介 因需要对Office系列进行程序操作,特需要使用COM编程. Microsoft Project生成进度计划,office家族软件,文件后缀为.mpp. 具体信息见维基百科http:// ...
- php之快速入门学习-15(php函数)
PHP 函数 PHP 的真正威力源自于它的函数. 在 PHP 中,提供了超过 1000 个内建的函数. PHP 内建函数 如需查看所有数组函数的完整参考手册和实例,请访问我们的 PHP 参考手册. P ...
- Hibernate(十四)缓存
一.什么是缓存 缓存是介于应用程序和永久必数据存储源之间,目的是为了降低应用程序直接读写永久必数据存储源的频率,从而提高运行性能 缓存通常是在内存中的如: Office中的Word.excel Hib ...
- _PyUnicodeUCS4_AsDefaultEncodedString
"_PyUnicodeUCS4_AsDefaultEncodedString"的出现一般源于你在两个地方分别装了python,两个分别用UCS2和UCS4编码进行的build. 解 ...
- iOS正則表達式(一)
什么是正則表達式? 正則表達式是对字符串操作的一种逻辑公式. 作用? 在iOS开发中我们通常使用正則表達式来匹配给定的字符串是否符合我们的业务逻辑,比方说用户注冊帐号仅仅能是手机号或者邮箱等.我们还能 ...
- 使用Android编写录制视频小程序演示样例
主要实现录制功能的类:Camera类和MediaRecorder类.功能描写叙述:首先进入视频录制界面,点击录像button进入录像功能界面,点击录制開始录制视频, 点击停止button,将录制的视频 ...