利用wget 抓取 網站網頁 包括css背景圖片

來源:互聯網
上載者:User
wget是一款非常優秀的http/ftp下載工具,它功能強大,而且幾乎所有的unix系統上都有。不過用它來dump比較現代的網站會有一個問題:不支援css檔案,它不會自動下載、重新連結css中所指定的圖片。這個問題導致的最常見的後果是dump下來的網站看不到背景圖片。本文所介紹的這個指令碼主要就是用來解決這個缺陷的。

這裡簡要介紹一下這個指令碼的細節:

  • 第3行用於設定要下載的網站的地址。
  • 第10行用於將檔案名稱轉換為windows相容的格式。windows對檔案名稱格式的要求比unix更為苛刻一點,這裡指定為windows也可以相容unix系統。總的來說,wget的這個功能稍微弱了一點,面對一些更苛刻的系統就沒有辦法了。
  • 第13行用於忽略robots.txt。很多網站的css、js檔案都是在robots.txt中被定義為spider不可訪問的。
  • 第15、16行用於忽略某些目錄和檔案。因為沒有了robots.txt的限制,wget可能會去訪問一些不需要的東西。這裡可以根據具體情況做限制。
  • 第19~24行下載css中連結的檔案。
  • 第26~29行修正css中的連結。

以下是這個指令碼的內容

  1. #!/bin/sh  
  2.   
  3. ADDR="http://www.EXAMPLE.com/"  
  4.   
  5. SERVER=${ADDR#http://}  
  6. SERVER=${SERVER%%/*}  
  7.   
  8. wget /  
  9.     --html-extension /  
  10.     --restrict-file-names=windows /  
  11.     --convert-links /  
  12.     --page-requisites /  
  13.     --execute robots=off /  
  14.     --mirror /  
  15.     --exclude-directories /comment/reply/,/aggregator/,/user/ /  
  16.     --reject "aggregator*" /  
  17.     "$ADDR"  
  18.   
  19. find $SERVER -type f -name "*.css" -exec cat {} /; |  
  20. grep -o 'url(/[^)]*)' |  
  21. sort |   
  22. uniq |  
  23. sed 's/^url(/(.*/))$/http:////'$SERVER'/1/' |  
  24. wget --mirror --page-requisites -i -  
  25.   
  26. for i in `find $SERVER -type f -name "*.css"`; do  
  27.     PREFIX="$(echo $i | sed 's/[^//]*//g; s///$//; s////../////g')"  
  28.     sed -i 's/url(///url('$PREFIX'/g' $i  
  29. done  
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.