有看网络书的同鞋么。。下载网络小说的脚本[updated 2011 您所在的位置:网站首页 bookshelf下载 有看网络书的同鞋么。。下载网络小说的脚本[updated 2011

有看网络书的同鞋么。。下载网络小说的脚本[updated 2011

2023-03-13 17:37| 来源: 网络整理| 查看: 265

代码: 全选

[liwei@myhost ~/scripts/t-工具] $ >>_ cat search-novel.sh #!/bin/bash # 功能: 搜索小说名称或关键词(中文),从89文学网站(www.89wx.com)找到页面并下载储存在设定好的地方 # 将中文字符转换为url编码命令参考了lrcdis脚本 # 下载文件后用read-txt打开? # Date: May 31,2011 by wiewi # Email: [email protected] # 设置临时目录 USER=$(whoami) [ -d /home/$USER/tmp ] || mkdir -pv /home/$USER/tmp # 搜索结果存放 RESULT=/home/$USER/tmp/search_result # 章节html文件列表 CHAP_LIST=/home/$USER/tmp/chapter_list # 书架文件 BOOKSHELF=/home/$USER/tmp/bookshelf # 下载小说存放目录 DEST_DIR=/home/$USER/study/books/小说/下载 Usage () { cat $RESULT # 选出第一个结果 URL="$(cat $RESULT | grep '/' | sed -n '1p' | awk '{print $1}')" } # 确认下载 Sure () { echo "-------------------------------" echo "将要下载的小说:" echo "`cat $RESULT | grep '89文学' | head -n 1`" echo "确定下载?(y/n/q)" echo "-------------------------------" read action } # 删除中间文件 Delete () { ! [ -z $RESULT ] && rm -f $RESULT; ! [ -z $CHAP_LIST ] && rm -f $CHAP_LIST; } Get_Page () { # 百度到的89文学的地址字符串有两种形式: # 1.不含html字符的,为小说介绍页面 # 2.含有html字符的,为小说目录页面 # 分两种情况得到小说的序号 if [ `echo $URL | grep -i html` ];then SER=`echo $URL | cut -d '/' -f 5` else SER=`echo $URL | cut -d '/' -f 3` fi # THOU 大概是小说的分类,是网站url里的一个数据,计算方式是SER/1000 THOU=$(($SER/1000)) # 最后得到小说章节列表页面 PAGE="http://www.89wx.com/html/book/$THOU/$SER/" # 下载此页面的信息,下面有用 curl $PAGE | grep href | sed -n '4,$p' | head -n -1 > "$CHAP_LIST" 2> /dev/null } # 从CHAP_LIST中读取每一个章节的html文件名,依次下载其内容并重定向到txt中 Download () { [ -d "$DEST_DIR" ] || mkdir -p "$DEST_DIR" # 用于计算下载进度 TOTAL=$(cat $CHAP_LIST | wc -l) NUM=1 cat /dev/null > "$DEST_DIR"/"$WORD".txt while read line do CHAPTER=`echo $line | awk '{print $2}' | cut -d '"' -f 2` w3m -dump $PAGE/$CHAPTER | sed -n '4,$p' | head -n -15 >> "$DEST_DIR"/"$WORD".txt echo "$NUM" of "$TOTAL" Downloaded. NUM=$(($NUM+1)) done < $CHAP_LIST # 更新bookshelf内容 echo "$WORD" "$TOTAL" >> $BOOKSHELF } # 判断以前是否下载过该文件 Check_Exist () { if [ "`cat $BOOKSHELF | grep "$WORD"`" ];then EXIST=1; echo "----------------------------" echo " $WORD.txt 已存在" echo "----------------------------" else EXIST=0; fi } # 检测小说是否有更新 Check_Update () { # WORD="$1" Search Get_Page TOTAL=`cat "$CHAP_LIST" | wc -l` TOTAL_ORIG=`cat "$BOOKSHELF" | grep "$WORD" | awk '{print $2}'` if [ "$TOTAL_ORIG" = "$TOTAL" ];then echo "$WORD" 没有更新 elif [ "$TOTAL_ORIG" -lt "$TOTAL" ];then Get_Update else echo "检测数据出错" fi } Get_Update () { NUM=1 # 删除已经下载过的章节名称 sed -i "1,"$TOTAL_ORIG"d" "$CHAP_LIST" while read line do CHAPTER=`echo $line | awk '{print $2}' | cut -d '"' -f 2` w3m -dump $PAGE/$CHAPTER | sed -n '4,$p' | head -n -15 >> $DEST_DIR/$WORD.txt echo "$NUM" of "$TOTAL" Downloaded. NUM=$(($NUM+1)) done < $CHAP_LIST # 删除书架上原有的信息 sed -i "/$WORD/d" $BOOKSHELF # 显示更新信息 echo " "$WORD" 更新了$(($TOTAL-$TOTAL_ORIG))章" # 更新bookshelf内容 echo "$WORD" "$TOTAL" >> $BOOKSHELF } Work() { # 取得下载页面信息 Get_Page # 检测以前是否下载过 Check_Exist if [ "$EXIST" = 1 ];then Check_Update else # 按章节下载并保存 Download fi # 删除中间文件 Delete # 完成提示 echo "---------------------------" echo "$WORD.txt 已保存到$DEST_DIR" echo "---------------------------" exit 0 } # 程序主体 Prompt $@ Search while true do Sure # 不满意则重新输入关键词搜索 if [ "$action" = 'n' -o "$action" = 'N' ];then Prompt Search elif [ "$action" = 'q' -o "$action" = 'Q' ];then exit 0 else break fi done Work 首先,俺看的是盗版,忏悔一下~~ 其次,很多盗贴网站不提供下载; 再次,即便有些提供下载,也只有快车、迅雷、旋风的链接; 总之,在linux下面看盗贴只能用浏览器。。有时候懒不想开浏览器,所以就想起来写个看小说的脚本。 起先写的是个调用vim打开txt的脚本,可以按章节阅读,然后想到windows下的小说阅读器很多都有搜索下载的功能,于是有了上面这个,解析地址比较麻烦,而且各个网站的html命名方式不一样,干脆就选定了89文学这一个,因为我连续打开了好多本书发现了一点点能利用的规律。。。

update 2011-06-03 根据楼下同学的想法,小小修改了一下,增加了一个bookshelf,用于存放下载了的小说名称以及进度;增加update参数,一次更新bookshelf中的所有小说;增加一个检测函数,在按名称搜索时首先检测小说是否存在,是 则更新,否 则从头下载~~图片章节还是木有好办法~~

下载已存在的文件会有提示: update参数的运行效果: ps1:本人小菜一只,各种bug不足请各位大侠轻拍 ps2: 本来发帖是想求问sed过滤行的问题 比如 cat file.txt | sed -n '4,$p' 会打印出第4行直到文件末尾,那么sed有没有办法打印类似第4行到倒数第二行这样范围的内容? 在sed后面添加管道 | head -n -2 倒是可以实现,想知道sed能否一次搞定?


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有