大批量文件下载

本文介绍了一种解决批量下载大量图片时,使用下载工具速度慢的问题的方法。通过编写C++程序,利用多线程和wget实现高效下载,并通过脚本将URL按域名分组,进一步优化下载效率。同时,文中还分享了解决Windows中大量cmd.exe进程占用问题的方法。

今天碰到个问题:批量下载十几万张图片、且分散在很多网站上。

迅雷、FlashGet都有导入URL列表,然后批量下载的功能。但URL上万以后,速度很慢,界面几乎无响应甚至异常退出。最大任务数才几十,不给力。而图片文件又很小,单个文件不值得再多线程下载了。所以用下载工具不合适。

单下一张图片时,时间都是秒级的。系统所在SSD的IOPS大约50000,估计来几千个线程也能HOLD住。于是写了个C++程序,开300个线程,每线程再用system函数调用wget下载(中间还要经过cmd.exe去调用,实际是600个程)。效果还不错。

正下得起劲时,看日志发现个缺陷:同一网站的内容随机分给多个wget,导致频繁重连,费了不少时间。给每个wget进程的URL最好在相同域上,又想出个办法:写段脚本把URL按域分成几百份,每个wget一份名单,照着下去,既快又简单。
(先前的程序就当是做多线程的习题了尴尬

另:中间想改进时,杀掉了主程序。但任务管理器中看,系统还有几百个 cmd.exe 进程。手工删了几十个,烦了。linux有killall,Windows呢?……搜了下,有对应的:

  • tasklist 查看所有进程
  • tasklist /fi "imagename eq cmd.exe" 列出所有叫“cmd.exe”的进程。
  • taskkill /fi "imagename eq cmd.exe" /f 杀掉所有叫“cmd.exe”的进程。世界清静了……安静

使用matlab批量下载网站上的文件-MatlabUrlDownloadToFile.m 前几天美国数学建模成绩出了,我们按照网址下载了自己的证书,另外想看看学校今年的获奖情况,由于学校的参赛队伍数众多,一个一个下载证书再统计显得麻烦,于是想自己用matlab开发一个小程序以实现同类型文件的批量下载。很多网站上有介绍使用Windows API 函数URLDownloadToFile,但是这个在VC上实现容易,要把它移植到matlab上还得使用MEX,有点麻烦了。这几天一直徘徊个大小网站,没有找到相关信息。最后还是自己使用lookfor找到需要的函UrlWrite,调用这个函数轻松搞定批量下载! 以下是代码: %使用matlab下载网站上的文件 %使用urlwrite函数下载网站上的文件 %特别适用于批量下载同类型的文件 % Created by longwen36 2011-4-16 %使用urlwrite实现批量下载 %以下载2011美赛数模证书为例 clc,clear; num = 11701:11710; URLs = cell); folder_filenames = cell); filenames = cell); for idx  = 1:length;     URLs{idx} = sprintf);     filenames{idx} = sprintf); end tic; for idx = 1:length;     fprintf;     [f, status] = urlwrite;     if status == 1;         fprintf;     else         fprintf;     end     end etime = toc; fprintf,etime); 复制代码 下载速度还挺快的,才发现,matlab功能确实很强大,函数很齐全。利用这个函数,加以改进,编写GUI,就可以做个简易的批量下载器了! 感兴趣的同仁可以试试!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值