在Mac OS X上構建wget來抓取靜態網站內容

咱們的目標是在Mac OS上獲取一個靜態服務器的內容,一般用wget是一個很好的選擇。javascript

wget是一個命令行工具用於從網絡服務器來獲取內容。可是在Mac OS X(Mountain Lion/ Mavericks / Snow Leopard)上沒有提供該工具,可是有curl。
css

wget VS curl

curl
html

  • 基於跨平臺的庫libcurljava

  • 支持unix管道python

  • 返回錯誤代碼來支持錯誤處理git

  • 只返回單個url的內容,不支持自動取連接的內容github

  • 大量協議支持諸如 :FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP, RTMP and RTSPweb

  • 可移植性好shell

  • 支持不一樣的SSL/TSL庫ruby

  • 支持HTTP認證(HTTP Authentication)

  • 支持雙向和多部分提交數據

  • 支持壓縮

  • MIT協議

wget

  • 只支持命令行

  • 支持遞歸的抓取數據,也就是說能夠抓取返回內容中的url連接的內容。

  • 很是古老,開發不活躍。

  • 使用HTTP 1.0

  • GNU項目的一部分

  • GPL 協議

整體而言curl比wget要進步許多,但是要獲取一個網站的鏡像,迭代功能必不可少。只好本身動手,在Mac上構建一個wget。

構建wget

首先肯定你已經安裝了Xcode和GCC,若是不知道如何安裝,能夠參考這個連接

而後從gnu下載wget的源碼

curl -O http://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz

下載好後,解壓縮

tar -xvf wget-1.15.tar.gz

解壓縮好後,須要運行配置命令,爲編譯作準備

cd wget-1.15
./configure --with-ssl=openssl

這裏咱們選用openssl做爲ssl的參數選項。你們必定不會忘記最近發生的openssl的heartbleed漏洞吧 :)

配置好了之後,運行make

make

這裏不出意外會跳出一大堆的警告,不要擔憂,若是你看到以下的內容,你應該編譯成功了

... ...
... ...
gcc  -O2 -Wall   -o wget cmpt.o connect.o convert.o cookies.o ftp.o css_.o css-url.o ftp-basic.o ftp-ls.o hash.o host.o html-parse.o html-url.o http.o init.o log.o main.o netrc.o progress.o ptimer.o recur.o res.o retr.o spider.o url.o warc.o utils.o exits.o build_info.o  version.o ftp-opie.o openssl.o http-ntlm.o ../lib/libgnu.a -liconv  -lssl -lcrypto -lz -ldl -lz -lz
Making all in doc
./texi2pod.pl -D VERSION="1.15" ./wget.texi wget.pod
/usr/bin/pod2man --center="GNU Wget" --release="GNU Wget 1.14" wget.pod > wget.1
Making all in po
Making all in tests
make[2]: Nothing to be done for `all'.
Making all in util
make[2]: Nothing to be done for `all'.
make[2]: Nothing to be done for `all-am'.

最後,安裝

sudo make install

安裝成功後,試一試wget是否成功安裝

$ which wget
/usr/local/bin/wget

若是看到上述結果說明wget已經成功構建並部署到/usr/local/bin目錄了

好了,萬事具有,能夠開始抓取你想要得到內容的網站了。

wget -mk http://website.com

其中-m參數表示迭代的抓取,-k參數表示用相對路徑取代絕對路徑。抓取的內容會被存放在本地的website.com的目錄下。

舉個例子,好比我要抓新浪新聞

$ wget -mk http://news.sina.com.cn
--2014-06-30 16:55:26--  http://news.sina.com.cn/
Resolving news.sina.com.cn... 58.63.236.31, 58.63.236.46, 58.63.236.48, ...
Connecting to news.sina.com.cn|58.63.236.31|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 636992 (622K) [text/html]
Saving to: ‘news.sina.com.cn/index.html’

100%[======================================>] 636,992      391KB/s   in 1.6s   

2014-06-30 16:55:29 (391 KB/s) - ‘news.sina.com.cn/index.html’ saved [636992/636992]

Loading robots.txt; please ignore errors.
--2014-06-30 16:55:29--  http://news.sina.com.cn/robots.txt
Reusing existing connection to news.sina.com.cn:80.
HTTP request sent, awaiting response... 200 OK
Length: 70 [text/plain]
Saving to: ‘news.sina.com.cn/robots.txt’

100%[======================================>] 70          --.-K/s   in 0.03s   

2014-06-30 16:55:29 (2.54 KB/s) - ‘news.sina.com.cn/robots.txt’ saved [70/70]

--2014-06-30 16:55:29--  http://news.sina.com.cn/js/792/2012-08-09/41/headnews.js
Reusing existing connection to news.sina.com.cn:80.
HTTP request sent, awaiting response... 200 OK
Length: 31699 (31K) [application/x-javascript]
Saving to: ‘news.sina.com.cn/js/792/2012-08-09/41/headnews.js’

100%[======================================>] 31,699      --.-K/s   in 0.04s   

2014-06-30 16:55:29 (731 KB/s) - ‘news.sina.com.cn/js/792/2012-08-09/41/headnews.js’ saved [31699/31699]

--2014-06-30 16:55:29--  http://news.sina.com.cn/pfpnews/js/libweb.js
Reusing existing connection to news.sina.com.cn:80.
HTTP request sent, awaiting response... 200 OK
Length: 6554 (6.4K) [application/x-javascript]
Saving to: ‘news.sina.com.cn/pfpnews/js/libweb.js’

100%[======================================>] 6,554       --.-K/s   in 0.03s

抓成功後的目錄以下

注意:

  • 這樣的方式僅適用於靜態網站,對於使用動態代碼生成的網站無能爲力

  • 地址轉換是發生在全部內容抓取完成以後,若是你中途退出,則全部的地址連接仍然指向原始地址。當你所要抓取的內容巨大時,須要很是當心。

  • 爲了防止流量過大,對服務器形成太大的負擔,可使用-w參數設置兩個請求中的間隔時間

使用Brew

另一個頗有效地方法是使用homebrew,homebrew是一個包管理工具。安裝很是簡單:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安好了之後,運行

$ brew install wget

就行了,很是方便

相關文章
相關標籤/搜索