博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux多线程网页截图-shell
阅读量:6635 次
发布时间:2019-06-25

本文共 1376 字,大约阅读时间需要 4 分钟。

  hot3.png

老大临时安排任务,要定期对大量(万为单位)的网站截图并归档保存。最早使用的是window下的一个解决方案:webshotcmd.exe+批处理。 运行了一段时间,发现经常弹出webshotcmd.exe程序未响应的窗口,需要人工点击确定后才能继续截图,而且webshocmd未注册版本截出的 图是灰色的,不方便查看。

google了下,发现了linux的两个截图工具cutycapt和phantomjs,经过测试,cutycapt截图较慢,但比较稳定,phantomjs截图速度较快,但时有出现进程假死的情况。权衡利弊,决定使用cutycapt+shell脚本的方式截图:

webshot.sh

#/bin/bash#webhsot#by caishzh 2013 WEBSHOTDIR="/data/webshot"mkdir -p $WEBSHOTDIR while read LINEdo     DISPLAY=:0 cutycapt --url=http://$LINE --max-wait=90000 --out=$WEBSHOTDIR/$LINE.jpg >/dev/null 2>&1done

脚本很简单,就不注释了,domain.txt是网址列表。。

执行脚本,可以正常截图,图片质量也很高。但另一个问题出现了,对几万个网站截图,时间周期太长,估算需要半个月左右。
时间太长,耗不起,需要优化下脚本。找了下资料,决定使用多线程截图。其实shell无法实现多线程,只是将多个进程放入后台执行而已。

multiwebshot.sh

#/bin/bash#Multithreading webshot#by caishzh 2013 WEBSHOTDIR="/data/webshot"mkdir -p $WEBSHOTDIR #将domain.txt分割成10个文件(x开头),每个文件5000行split -l 5000 domain.txt  for i in `ls x*`;do{    for j in `cat $i`;do            DISPLAY=:0 cutycapt --url=http://$j --max-wait=90000 --out=$WEBSHOTDIR/$j.jpg >/dev/null 2>&1    done}&donewait#删除由spilt分割出的临时文件rm x* -f

脚本说明:

先使用split将domain.txt分割成多个个文件,每个文件5000行,再使用两个嵌套的for循环实现多进程截图。第一个for是列出由 split分割的的文件名,第二个for对这些文件里的网站截图,注意大括号后面的&,&的作用是将大括号里的脚本代码放到后台执行,这 就模拟处理“多线程”的效果,实际则是多进程。wait是等待前面的后台任务全部完成才往下执行。

使用该脚本大大提高了截图的是速度,在两天左右的时间里完成所有网站的截图,效果显著。需要注意的是,cutycapt截图是需要占用较大的网络带宽和cpu资源,在配置较差的机器上不要开太多的cutycapt“线程”,以免造成机器死机。

参考:

转载于:https://my.oschina.net/cszhi/blog/137265

你可能感兴趣的文章
C++静态库与动态库
查看>>
linux SecureCRT 下载文件
查看>>
【领域本体】领域本体的构建方法概述
查看>>
win7的svchost.exe占用内存过高如何解决
查看>>
Java数据类型转换
查看>>
和Eclipse一起走过的日子
查看>>
Activity生命周期解说
查看>>
mybatis拦截器实现分页功能的示例讲解
查看>>
thinkphp模板中使用方法
查看>>
ListBox和ComboBox绑定数据简单例子
查看>>
CAD2GIS:arcengine注记添加(转载)
查看>>
Python之类型转换
查看>>
安装ssh服务
查看>>
Spin.js-CSS动画进度载入器
查看>>
C语言必会面试题(3、耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)...
查看>>
【python】打印函数调用栈
查看>>
console.time 简单分析javascript动态加入Dom节点的性能
查看>>
Win8 Metro(C#)数字图像处理--2.60部分彩色保留算法
查看>>
V4L2开发要点【转】
查看>>
技术人员转型是件痛苦的事情~
查看>>