歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> linux網頁截圖-shell

linux網頁截圖-shell

日期:2017/3/1 16:22:04   编辑:SHELL編程
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“線程”,以免造成機器死機。
Copyright © Linux教程網 All Rights Reserved