Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本

前端之家收集整理的这篇文章主要介绍了Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本

不知道为什么,我总想用 Shell 脚本来实现把一个站点内容给下载下来。但是下载什么站点我确不知道。今天尝试了一下利用 curl 实现了下载一个站点列表的 demo 算是小试牛刀。

当脚本成功之后,我知道,要把这个站点完全下载下来也是没有问题的。不过是需要更加复杂的循环和匹配而已。

接下来有工作要做,所以 shell 的学习暂时先告一段落。

实现代码

#!/bin/bash
echo @H_404_20@'--开始下载首页--'
curl -s @H_404_20@'http://man.linuxde.net/par/5' > ./html/index.html
mh=./html/index.html
sl=$(nl $mh | grep @H_404_20@'<div class="list_bd clearfix">' | head -1 | sed @H_404_20@'s/^[ ]*//g' | cut -d @H_404_20@' ' -f1)
el=$(nl $mh | grep @H_404_20@"<div class='paging'>" | head -1 | sed @H_404_20@'s/^[ ]*//g' | cut -d @H_404_20@' ' -f1)
sed -n  @H_404_20@"$sl",@H_404_20@"$el"@H_404_20@'p' $mh > main.htm

echo @H_404_20@'--开始下载内页--'
#<a href="
while read line; do
  url=$(echo $line | grep @H_404_20@'<a href="' | sed @H_404_20@'s/<div class="name"><a href="//g' | cut -d @H_404_20@'"' -f1)
  if [[ -n $url ]]; then
    echo @H_404_20@'--开始下载' $name @H_404_20@'页面--'
    name=$(echo $url | cut -d @H_404_20@'/' -f4)
    html=@H_404_20@'./html/'$name@H_404_20@'.html'
    curl -s $url > $html
    # echo '--开始处理' $name '页面链接--'
    # sed -i 's/http:\/\/man\.linuxde\.net\//g' $html
  fi
done < main.htm

echo @H_404_20@'--页面下载完成--'
echo @H_404_20@'--处理页面链接--'

sed -i @H_404_20@'' @H_404_20@'s/http:\/\/man\.linuxde\.net\///g' $(grep -rl @H_404_20@'http://man.linuxde.net' ./html)
sed -i @H_404_20@'' @H_404_20@'s/" title="/\.html" title="/g' $(grep -rl @H_404_20@'" title="' ./html)
echo @H_404_20@'--链接处理完成--'

实现原理

  1. 先下载列表首页。我这里只是尝试,所以只下载了第一页。如果要下载多页,做好循环之后,自动下载就是。
  2. 截取页面的列表内容区域。
  3. 根据页面特点,拆解出页面链接
  4. 循环下载链接并保存。
  5. 批量替换页面链接不合适的地方。

然后就大功告成了。

不过 wgetcurl 可能更适合干这个工作。我目前还没有学到很深入。回头有时间再接着研究一下。

后续补充

看了下 wget 我气炸了。原来我要下载人家网站全站,用 wget 一句命令就可以搞定了 -_-|||

wget --mirror -p --convert-links -P ./ http://man.linuxde.net/

神奇的 shell

以上脚本均在 mac 下测试通过,在 Linux 下可能会有稍许不同。 本文由 FungLeo 原创,允许转载,但转载必须保留首发链接

猜你在找的Bash相关文章