需要爬取国内某个网站,但是这个网站封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 多进程 一分钟下载二百张图片 是什么样子的体验的更多相关文章

  1. python多进程断点续传分片下载器

    python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...

  2. Office_PPT_让你一分钟完成上百张图片的快速保存

    1 方式 修改PPT文件格式,由PPT修改为rar,再进行解压操作 进入到ppt->media中找到你在PPT为文件中使用的图片. 2 PPT北京图片下载网址 别样网:https://www.s ...

  3. Python中的多进程与多线程(二)

    在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...

  4. 【Python从入门到精通】(二十五)Python多进程的使用

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...

  5. Python 多进程 多线程 协程 I/O多路复用

    引言 在学习Python多进程.多线程之前,先脑补一下如下场景: 说有这么一道题:小红烧水需要10分钟,拖地需要5分钟,洗菜需要5分钟,如果一样一样去干,就是简单的加法,全部做完,需要20分钟:但是, ...

  6. Qt+Python开发百度图片下载器

    一.资源下载地址 https://www.aliyundrive.com/s/jBU2wBS8poH 本项目路径:项目->收费->百度图片下载器(可试用5分钟) 安装包直接下载地址:htt ...

  7. python多进程详解

    目录 python多进程 序.multiprocessing 一.Process process介绍 例1.1:创建函数并将其作为单个进程 例1.2:创建函数并将其作为多个进程 例1.3:将进程定义为 ...

  8. 一篇文章搞定Python多进程(全)

    1.Python多进程模块 Python中的多进程是通过multiprocessing包来实现的,和多线程的threading.Thread差不多,它可以利用multiprocessing.Proce ...

  9. 进击的Python【第五章】:Python的高级应用(二)常用模块

    Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigPar ...

随机推荐

  1. springboot h2数据库的配置

    配置文件 #h2 数据库配置 #配置数据库连接地址spring.datasource.url=jdbc:h2:sunniwell:sos#配置数据库驱动spring.datasource.driver ...

  2. ab测试工具参数详解

    -n 测试会话中所执行的请求个数,默认仅执行一个请求 -c 一次产生的请求个数,即同一时间发出多少个请求,默认为一次一个 -t 测试所进行的最大秒数,默认为无时间限制....其内部隐含值是[-n 50 ...

  3. 免费资源:JellyFish的iOS8应用图标集

    本地下载 包含设计和PNG效果图片的iOS8的图标集合.

  4. maven 下载源码

    mvn eclipse:eclipse  -DdownloadSource=true

  5. socket.io对IE8的支持

    默认下载了最新版的socket.io,版本号是1.7.2,对IE8的支持不好,反正在IE8下收发消息都不行.在网上查了很多资料,都解决不了IE8的问题,崩溃. 最后用了一个大家比较认可的版本1.0.6 ...

  6. 将 Shiro 作为应用的权限基础 二:shiro 认证

    认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...

  7. php+tomcat 配置运行环境

    为了学习php,本教程始于:2017.11.16 完成时的截图! 1.首先下载: VC 2015++ 点击下载 2. 把下载好的php复制到本目录,然后解压并且重命名为“php”,如果没有下载php, ...

  8. Linux下启动eclipse报错

    A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be avail   Java RunTime Environm ...

  9. PyQt5教程——介绍(1)

    PyQt5教程阅读须知 “PyQt5教程”系列若不做明显提示,默认翻译自zetcode. 有需要翻译精度的朋友可以自行阅读英文文档. 如果本系列博文侵犯了您的合法权益,请在博客中留下评论或联系:che ...

  10. 解决Cydia出现红字提示“Sub-process/usr/bin/dpkg returned an error code(2)

    进入此路径/var/lib/dpkg/,修改红框中的文件名,依次修改为:"available" 重新命名为 "available-bak":"stat ...