shell实例浅谈之十三wget下载博客保存在本地

一、描述

      一直想把博客的内容下载到本地,以便在断网的时候能回顾以前记下的笔记,针对与自己的博客设计了一个下载脚本,读者也可保存自己喜欢的博客。也可以使用wget -mk -np递归下载所有链接,但内容比较杂乱。

二、详解

1、文件名与csdn网站地址对应

(在firefox浏览器的“帮助”选项卡下的“故障排除信息”中可以找到浏览器的用户代理信息)

#!/bin/bash
COMMAND="wget --user-agent='Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0' "
Head="http://blog.csdn.net"
ArticleList=$Head/"taiyang1987912/article/list"
CPWD=$(pwd)

download_article()
{
    CONTENTSDIR=$CPWD/contentsdir
    [ -d $CONTENTSDIR ] || mkdir $CONTENTSDIR
    cd $CONTENTSDIR

    for fileinfo in `sed -n '/<h1>/, /<\/h1>/p' $1`; do
        if [[ "$fileinfo" =~ href.* ]]; then
            file=`echo $fileinfo | awk -F"\"" '{print $2}'`
            echo "--------------------------------------"
            echo "$COMMAND$Head$file"
            $COMMAND$Head$file >/dev/null 2>&1
        fi
    done
}
start()
{
    for NUM in {1..8} ; do
        echo "**********************************"
        cd $CPWD
        echo $COMMAND$ArticleList/$NUM
        $COMMAND$ArticleList/$NUM >/dev/null 2>&1
        mv $NUM "contentslist_$NUM"
        download_article $CPWD/"contentslist_$NUM"
     done
}
start

2、文件名按csdn博客标题

#!/bin/bash
COMMAND="wget --user-agent='Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0' "
Head="http://blog.csdn.net"
ArticleList=$Head/"taiyang1987912/article/list"
CPWD=$(pwd)

download_article()
{
    CONTENTSDIR=$CPWD/contentsdir
    [ -d $CONTENTSDIR ] || mkdir $CONTENTSDIR
    cd $CONTENTSDIR
    sed -n '/<h1>/, /<\/h1>/p' $1 > fileinfo.tmp

    cat fileinfo.tmp | while read node;
    do
        if [[ "$node" =~ href.* ]]; then
            file=`echo $node | awk -F"\"" '{print $4}'`
            read node
            name=`echo $node | tr -d ' '`

            echo "--------------------------------------"
            echo "$COMMAND$Head$file"
            $COMMAND$Head$file >/dev/null 2>&1
            mv `basename $file` $name".html"
        fi
    done
    rm -f fileinfo.tmp
}
start()
{
    for NUM in {1..8} ; do
        echo "**********************************"
        cd $CPWD
        echo $COMMAND$ArticleList/$NUM
        $COMMAND$ArticleList/$NUM >/dev/null 2>&1
        mv $NUM "contentslist_$NUM"
        download_article $CPWD/"contentslist_$NUM"
     done
}
start

3、下载新浪博客文章

       新浪博客的下载相对来说比较简单,不用过多的分析html源码,直接就能提取文章名和绝对路径网址进行下载。也不需要使用代理,直接使用wget不加参数就行下载。

#!/bin/bash
COMMAND="wget "
ArticleList="http://blog.sina.com.cn/s/articlelist_2801495241_0"
CPWD=$(pwd)

download_article()
{
    CONTENTSDIR=$CPWD/contentsdir
    [ -d $CONTENTSDIR ] || mkdir $CONTENTSDIR
    cd $CONTENTSDIR
    for fileinfo in `sed -n '/title.*blank/p' $1 | tr -d "[\t][ ]"`; do
        url=`echo $fileinfo | awk -F"\"" '{print $6}'`
        name=`echo $fileinfo | awk -F"\"" '{print $2}'`         #处理特殊字符
        name=`echo $name | sed 's/\//_/p'`
        name=`echo $name | awk '{print $1}'`
        echo "$COMMAND$url"
        $COMMAND$url >/dev/null 2>&1
        mv `basename $url` $name".html"
    done
}
start()
{
    for NUM in {1..4} ; do
        echo "*************start*********************"
        cd $CPWD
        htmlList=$ArticleList"_$NUM.html"
        echo $COMMAND$htmlList
        $COMMAND$htmlList >/dev/null 2>&1
        download_article $CPWD/`basename $htmlList`
    done
    echo "**************finished********************"
}
start

三、总结

(1)下载文章时有时会遇到一些中文和特殊字符,需要经过一些特殊的处理,比如/就不能创建文件名。

(2)上述的代码都有一定的针对性,若要下载其他地方的博客,还需要调整shell脚本。

(3)其中也有更好的暂时没想到的设计,非常欢迎读者提出,同时也非常乐意解答读者的疑问,本人邮箱:aoyag888@qq.com。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乌托邦2号

博文不易,支持的请给予小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值