知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

linux网页截图-shell

发布时间:2014-09-05 14:26:30作者:知识屋

linux网页截图-shell
 
摘要: 老大临时安排任务,要定期对大量(万为单位)的网站截图并归档保存。最早使用的是window下的一个解决方案:webshotcmd.exe+批处理。 运行了一段时间,发现经常弹出webshotcmd.exe程序未响应的窗口,需要人工点击确定后才能继续截图,而且webshocmd未注册版本截出的 图是灰色的,不方便查看。 google了下,发现了linux的两个截图工具cutycapt和phantomjs,经过测试,cutycapt截图较慢,但比较稳定,phantomjs截图速度较快,但时有出现进程假死的状态。权衡利弊,决定使用cutycapt+shell脚本的方式截图
 
老大临时安排任务,要定期对大量(万为单位)的网站截图并归档保存。最早使用的是window下的一个解决方案:webshotcmd.exe+批处理。 运行了一段时间,发现经常弹出webshotcmd.exe程序未响应的窗口,需要人工点击确定后才能继续截图,而且webshocmd未注册版本截出的 图是灰色的,不方便查看。 
 
google了下,发现了linux的两个截图工具cutycapt和phantomjs,经过测试,cutycapt截图较慢,但比较稳定,phantomjs截图速度较快,但时有出现进程假死的状态。权衡利弊,决定使用cutycapt+shell脚本的方式截图:
 
webshot.sh
 
01
#/bin/bash
02
#webhsot
03
#by caishzh 2013
04
  
05
WEBSHOTDIR="/data/webshot"
06
mkdir -p $WEBSHOTDIR
07
  
08
while read LINE
09
do
10
     DISPLAY=:0 cutycapt --url=http://$LINE --max-wait=90000 --out=$WEBSHOTDIR/$LINE.jpg >/dev/null 2>&1
11
done<domain.txt
脚本很简单,就不注释了,domain.txt是网址列表。cutycapt的安装和使用参照这里。
执行脚本,可以正常截图,图片质量也很高。但另一个问题出现了,对几万个网站截图,时间周期太长,估算需要半个月左右。
时间太长,耗不起,需要优化下脚本。找了下资料,决定使用多线程截图。其实shell无法实现多线程,只是将多个进程放入后台执行而已。
 
multiwebshot.sh
 
01
#/bin/bash
02
#Multithreading webshot
03
#by caishzh 2013
04
  
05
WEBSHOTDIR="/data/webshot"
06
mkdir -p $WEBSHOTDIR
07
  
08
#将domain.txt分割成10个文件(x开头),每个文件5000行
09
split -l 5000 domain.txt
10
  
11
  
12
for i in `ls x*`;do
13
{
14
    for j in `cat $i`;do
15
            DISPLAY=:0 cutycapt --url=http://$j --max-wait=90000 --out=$WEBSHOTDIR/$j.jpg >/dev/null 2>&1
16
    done
17
}&
18
done
19
wait
20
#删除由spilt分割出的临时文件
21
rm x* -f
脚本说明:
先使用split将domain.txt分割成多个个文件,每个文件5000行,再使用两个嵌套的for循环实现多进程截图。第一个for是列出由 split分割的的文件名,第二个for对这些文件里的网站截图,注意大括号后面的&,&的作用是将大括号里的脚本代码放到后台执行,这 就模拟处理“多线程”的效果,实际则是多进程。wait是等待前面的后台任务全部完成才往下执行。
 
使用该脚本大大提高了截图的是速度,在两天左右的时间里完成所有网站的截图,效果显著。需要注意的是,cutycapt截图是需要占用较大的网络带宽和cpu资源,在配置较差的机器上不要开太多的cutycapt“线程”,以免造成机器死机。
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜