利用wget 抓取 网站网页 包括css背景图片

6 篇文章 0 订阅

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  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值