一、描述
一直想把博客的内容下载到本地,以便在断网的时候能回顾以前记下的笔记,针对与自己的博客设计了一个下载脚本,读者也可保存自己喜欢的博客。也可以使用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。