在CentOS下透過命令列抓取網頁畫面

使用此程式是  CutyCapt
http://cutycapt.sourceforge.net/

他是用Qt的WebKit實做的,所以伺服器尚要裝Qt包含WebKit的開發函式庫~

可以用yum裝 ,在這環境上我用rpm自己裝..
從這個repo http://dl.atrpms.net/el5-i386/atrpms/testing/ 抓三個相關的rpm
安裝順序是,有分成 32位元 跟64位元,最好依照作業系統版本安裝,

(x32)

http://dl.atrpms.net/el5-i386/atrpms/testing/qt44-4.4.3-10_4.el5.i386.rpm
http://dl.atrpms.net/el5-i386/atrpms/testing/qt44-x11-4.4.3-10_4.el5.i386.rpm
http://dl.atrpms.net/el5-i386/atrpms/testing/qt44-devel-4.4.3-10_4.el5.i386.rpm

(x64)
wget http://dl.atrpms.net/el5-x86_64/atrpms/testing/qt44-4.4.3-10_4.el5.x86_64.rpm
wget http://dl.atrpms.net/el5-x86_64/atrpms/testing/qt44-x11-4.4.3-10_4.el5.x86_64.rpm
wget http://dl.atrpms.net/el5-x86_64/atrpms/testing/qt44-devel-4.4.3-10_4.el5.x86_64.rpm
其實中途還有裝了兩個libXi..去pboon找到的..不知道做什麼的..

ftp://ftp.pbone.net/mirror/ftp.centos.org/5.5/os/x86_64/CentOS/libXi-1.0.1-4.el5_4.i386.rpm
ftp://ftp.pbone.net/mirror/ftp.centos.org/5.5/os/x86_64/CentOS/libXi-devel-1.0.1-4.el5_4.i386.rpm
ftp://ftp.pbone.net/mirror/ftp.centos.org/5.5/os/i386/CentOS/libXinerama-devel-1.0.1-2.1.i386.rpm

裝好以後把CutyCapt解壓縮 進資料夾執行 qmake

如果沒設路徑 qmake會裝在 /usr/lib/qt44/bin/qmake

然後make 就會有執行檔了,由於這裡是命令列的環境所以需要程式模擬視窗介面執行這隻程式CutyCapt有寫..只是我不知道去哪抓 xvfb-run 的 rpm pboon 所以 google 到

xvfb-run 直接抓下來解壓縮放到系統上就能用了-_-

如果沒裝 xorg-x11-server-Xvfb 可能也會不行…就 yum install xorg-x11-server-Xvfb 裝一下囉

然後就..可以用了

xvfb-run –server-args="-screen 0, 1024x768x24" CutyCapt –url=目標網址 –out=檔案名稱.png
指定了模擬出來的解析度大小跟網址與檔案名稱其他參數可以參考下面

—————————————————————————–
Usage: CutyCapt –url=http://www.example.org/ –out=localfile.png
—————————————————————————–
–help                         Print this help page and exit
–url=<url>                    The URL to capture (http:…|file:…|…)
–out=<path>                   The target file (.png|pdf|ps|svg|jpeg|…)
–out-format=<f>               Like extension in –out, overrides heuristic
–min-width=<int>              Minimal width for the image (default: 800)
–max-wait=<ms>                Don’t wait more than (default: 90000, inf: 0)
–delay=<ms>                   After successful load, wait (default: 0)
–user-styles=<url>            Location of user style sheet, if any
–header=<name>:<value>        request header; repeatable; some can’t be set
–method=<get|post|put>        Specifies the request method (default: get)
–body-string=<string>         Unencoded request body (default: none)
–body-base64=<base64>         Base64-encoded request body (default: none)
–app-name=<name>              appName used in User-Agent; default is none
–app-version=<version>        appVers used in User-Agent; default is none
–user-agent=<string>          Override the User-Agent header Qt would set
–javascript=<on|off>          JavaScript execution (default: on)
–java=<on|off>                Java execution (default: unknown)
–plugins=<on|off>             Plugin execution (default: unknown)
–private-browsing=<on|off>    Private browsing (default: unknown)
–auto-load-images=<on|off>    Automatic image loading (default: on)
–js-can-open-windows=<on|off> Script can open windows? (default: unknown)
–js-can-access-clipboard=<on|off> Script clipboard privs (default: unknown)
—————————————————————————–
<f> is svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm
—————————————————————————–

然後出來的圖片就是亂碼的=_=

在隨便裝個中文字體就可以了..
放到 /usr/share/fonts/chinese/TrueType 裡面
or Windows上的ttf ttc好像都可以..
例如..全字庫
http://www.cns11643.gov.tw/AIDB/file.do?path=download%2F%E5%AD%97%E5%9E%8B%E4%B8%8B%E8%BC%89%601q%60%E5%85%A8%E5%AD%97%E5%BA%AB%E6%AD%A3%E5%AE%8B%E9%AB%94%2Fname%2FTW-Sung-95_1_2.ttf

另外一套類似性質的程式
http://khtml2png.sourceforge.net/index.php?page=download
參考資料..
http://befun.520net.to/lover/ea/2009/10/04/php-linux
http://blog.jangmt.com/2009/10/cutycapt.html

svn 批次處理 與 sed 批次修改

  在程式設計提高生產力那本書上看到的,很「提高生產力」的方法..

在svn裡面要加入所有變更的檔案時,如果直接用 svn add * 來做很容易不小心加到一些svn的暫存檔或者不需要得檔案,通常都會用svn st 來觀察有哪些尚未處理一個一個加。

svn st 會列出所有檔案的狀態例如
? add.php
? remove.php
M edit .php
A haha.tpl

然後就要一個一個看著?的檔案把他加入..實在很麻煩,書上就提到透過bash shell的管線命令快速又正確的把檔案加入:

svn st | grep ^? | sed s/?// | xargs svn add

svn st 先列出所有檔案 丟給管線 grep篩選開頭是問號的列數
再管線丟給 sed 正規處理的程式 s代表取代 s/目標正規/取代值/
在這裡把?去掉了,再丟給xargs 他幫助不支援管線的程式,把輸入整理成參數的模式丟給svn add裡面,實際最後執行的就是:

svn add add.php remove.php

實在是很方便,在其他情況,例如還原(revert)所有的變更都可以透過這種方式來做。

也順便學到了sed的強大,有時候很多隻程式都複製來複製去(不好的作法),當發生問題時要全部一隻一隻去改就很麻煩,sed 除了可以做修改以外還有刪除增加取代都可以,所以可以批次修改所有重複的程式,真的能夠提昇不少的生產力呢!