无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6388|回复: 7
打印 上一主题 下一主题

批处理版的易读网txt小说下载器

[复制链接]
跳转到指定楼层
1#
发表于 2010-2-11 13:23:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  春节马上就要到了,貌似只剩下两天时间,在网上如何消遣?down一些txt小说回去慢慢欣赏,是件多么惬意的事情啊。namejm最近在网上转悠了好一阵子,发现一个非常干净的txt小说网站,名叫易读网,抓取txt小说十分方便。狂喜之余,做了个下载易读网txt小说的脚本,以方便广大书虫。
  如有什么bug,或有什么好的建议,望各位及时反馈。
  1. @echo off
  2. :: 功能:
  3. ::        按照多种方式下载易读网上的txt小说
  4. :: 实现过程:
  5. :: 1、下载指定的某篇小说:
  6. ::        首先下载小说首页,通过首页提取出每一章节的下载地址,然后下载每一章节的html文件,转为txt文本,最后按章节顺序提取正文内容,拼合即可;
  7. :: 2、根据配置文件下载指定的小说:
  8. ::        首先,需要在当前脚本所在的文件夹下存在"要下载的小说列表.txt"文件,文件内容按照 "《小说名》"|小说URL 的格式,
  9. ::        一行一条记录加以保存,前后不可有多余的字符;然后,把这个文件复制到 %destination%\tmp\要下载的小说列表\ 目录下,
  10. ::        覆盖同名文件,用批处理读取其中的配置,接下来的步骤同1;
  11. :: 3、下载指定页码上的所有小说:
  12. ::        首先下载指定页面,把其中各篇小说的首页地址提取出来,接下来的步骤同1;
  13. :: 4、下载指定页码范围内的所有小说:
  14. ::        首先下载指定页码范围内的所有页面,接下来的步骤同1;
  15. :: 5、下载全站的所有小说:
  16. ::        首先下载全站所有页码上的所有页面,接下来的步骤同1;

  17. mode con lines=26
  18. set www=http://www.yilook.com
  19. set TT=易读网txt小说下载器
  20. set destination=易读txt小说
  21. md "%destination%\tmp\要下载的小说列表\html" 2>nul
  22. pushd "%destination%\tmp\要下载的小说列表\html"

  23. :Main
  24. cls
  25. del /a /f /q *.* 2>nul
  26. del /a /f /q ..\txt\*.* 2>nul
  27. title %TT%
  28. echo.&echo.
  29. echo                    本程序可以按照以下方式下载易读网上的txt小说
  30. echo.
  31. echo                    易读网首页:http://www.yilook.com
  32. echo.
  33. echo                        1、下载指定的某篇小说
  34. echo.
  35. echo                        2、根据配置文件下载指定的小说
  36. echo.
  37. echo                        3、下载指定页码上的所有小说
  38. echo.
  39. echo                        4、下载指定页码范围内的所有小说
  40. echo.
  41. echo                        5、下载全站的所有小说
  42. echo.
  43. echo                        X、退出
  44. set choice=
  45. call :line
  46. set /p choice=                请输入指定功能代码(1/2/3/4/5/X):
  47. if not defined choice goto Main
  48. if /i "%choice:~0,1%"=="X" exit
  49. set "choice=%choice:~0,1%"
  50. if "%choice%"=="1" goto DownGivenNovel
  51. if "%choice%"=="2" goto DownGivenNovels
  52. if "%choice%"=="3" goto DownGivenPage
  53. if "%choice%"=="4" goto DownGivenPages
  54. if "%choice%"=="5" goto DownAllPages
  55. goto Main

  56. :DownGivenNovel
  57. cls
  58. title %TT%-指定网址
  59. echo.&echo.
  60. echo                请在易读网中找到某篇小说的URL,复制后粘贴到本窗口中使用。
  61. echo.
  62. echo                比如,《汉朝的那些事儿》,其URL地址为:
  63. echo.
  64. echo                    http://www.yilook.com/art_7200_8093.html
  65. echo.
  66. echo                把以上URL粘贴到本窗口即可下载《汉朝那些事儿》
  67. echo.
  68. echo                粘贴方法:鼠标点击右键,然后粘贴,不能使用快捷键Ctrl+V
  69. call :line
  70. echo                        请在下面输入小说的URL地址:
  71. echo.
  72. set URL=
  73. set /p URL=            
  74. if not defined URL goto DownGivenNovel
  75. if /i "%URL:~0,1%"=="X" exit
  76. if /i "%URL:~0,1%"=="M" goto Main
  77. curl -O %URL%
  78. htox32c /IP /O0 *.html
  79. for /f "tokens=3" %%i in ('findstr "TITLE" "*.txt"') do echo "%%i"^|%URL%>..\要下载的小说列表.txt
  80. goto DownNovel

  81. :DownGivenNovels
  82. cls
  83. title %TT%-配置下载文件清单
  84. echo.&echo.
  85. echo                请确认当前目录下存在"要下载的小说列表.txt"文件
  86. echo.
  87. echo                并且该文件中的内容为 "《小说名》"^|小说目录页URL 的格式
  88. echo.
  89. echo                一行一条记录,前后不可有多余字符。如:
  90. echo.
  91. echo                "《寻人启事》"^|http://www.yilook.com/art_7238_6170.html
  92. echo.
  93. echo                若不满足如上条件,请自行配置好后方可使用本功能
  94. call :line
  95. echo.
  96. set next=
  97. set /p next=                要继续下一步吗?(Y/N):
  98. if not exist ..\..\..\..\要下载的小说列表.txt goto DownGivenNovels
  99. if not defined next goto DownGivenNovels
  100. set "next=%next:~0,1%"
  101. if /i "%next%"=="X" exit
  102. if /i "%next%"=="M" goto Main
  103. if /i "%next%"=="Y" (
  104.     copy /y ..\..\..\..\要下载的小说列表.txt ..\
  105.     goto DownNovel
  106. )
  107. goto DownGivenNovels

  108. :DownGivenPage
  109. cls
  110. title %TT%-指定页码
  111. echo.&echo.&echo.&echo.
  112. echo                您可以指定某一页码,本脚本将下载易读网上这一页内
  113. echo.
  114. echo                列出的所有小说
  115. echo.
  116. echo                如:输入3,将下载这一页面所列出的所有小说:
  117. echo.
  118. echo                        http://www.yilook.com/artlist_3.html
  119. call :line
  120. set page=
  121. set /p page=                请输入指定页码:
  122. if not defined page goto DownGivenPage
  123. if /i "%page:~0,1%"=="X" exit
  124. if /i "%page:~0,1%"=="M" goto Main
  125. curl -O %www%/artlist_%page%.html
  126. goto HTMLtoTXT

  127. :DownGivenPages
  128. cls
  129. title %TT%-指定页码范围
  130. echo.&echo.
  131. echo                您可以指定某一页码范围,本脚本将下载易读网上这些页内
  132. echo.
  133. echo                列出的所有小说
  134. echo.
  135. echo                注意:起止页码必须用半角状态下的短横杠连接。
  136. echo.
  137. echo                如:输入 3-5,将下载易读网上下列页面内列出的所有小说:
  138. echo.
  139. echo                        http://www.yilook.com/artlist_3.html
  140. echo                        http://www.yilook.com/artlist_4.html
  141. echo                        http://www.yilook.com/artlist_5.html
  142. call :line
  143. set pages=
  144. set /p pages=                请输入指定页码的范围(如3-5):
  145. if not defined pages goto DownGivenPages
  146. if /i "%pages%"=="X" exit
  147. if /i "%pages%"=="M" goto Main
  148. curl -O "%www%/artlist_[%pages%].html"
  149. goto HTMLtoTXT

  150. :DownAllPages
  151. cls
  152. title %TT%-下载全站小说
  153. curl -O %www%/artlist_1.html
  154. htox32c /IP /O0 /U1+4 artlist_1.html
  155. cls
  156. for /f "tokens=6" %%i in ('findstr /i "第.*页" artlist_1.txt') do (
  157.     curl -O "%www%/artlist_[2-%%i].html"
  158. )

  159. :HTMLtoTXT
  160. cls
  161. title %TT%-网页转换为txt
  162. htox32c /IP /O0 /U1+4 *.html
  163. md ..\txt 2>nul
  164. del /a /f /q ..\txt\*.*
  165. move *.txt ..\txt>nul

  166. :PickupList
  167. cls
  168. echo.&echo    正在生成要下载的小说列表,请稍候...
  169. cd.>..\要下载的小说列表.txt
  170. for %%i in (..\txt\*.txt) do (
  171.     title %TT%-生成下载列表_%%~nxi
  172.     for /f "delims=<'> tokens=1,2" %%j in ('findstr /i "《.*》" "%%i"') do (
  173.         echo "%%j"^|%www%/%%k>>..\要下载的小说列表.txt
  174.     )
  175. )

  176. :DownNovel
  177. cls
  178. title %TT%-下载小说
  179. echo.&echo.
  180. echo                正在下载小说,请稍候...
  181. md ..\..\..\整理结果 2>nul
  182. del /a /f /q ..\..\..\整理结果\*.*
  183. rd /q /s ..\..\已下载小说的原始文档
  184. md ..\..\已下载小说的原始文档
  185. for /f "delims=| tokens=1,2" %%i in (..\要下载的小说列表.txt) do (
  186.     curl --create-dirs -o "..\..\已下载小说的原始文档\%%~i\index.html" "%%~j"
  187.     htox32c /IP /O0 /U1+4 "..\..\已下载小说的原始文档\%%~i\index.html"
  188.     cls
  189.     set lastchapter=1
  190.     for /f "delims=' tokens=1,2" %%x in ('findstr /i "第.*节" "..\..\已下载小说的原始文档\%%~i\index.txt"') do (
  191.         call :DownHTML "%%~i" "%%~x" "%%~y"
  192.     )
  193.     pushd "..\..\已下载小说的原始文档\%%~i\html"
  194.     htox32c /IP /O0 *.html
  195.     popd
  196.     md "..\..\已下载小说的原始文档\%%~i\txt" 2>nul
  197.     move "..\..\已下载小说的原始文档\%%~i\html\*.txt" "..\..\已下载小说的原始文档\%%~i\txt"
  198.     call :PickupTXT "%%~i"
  199.     move "..\..\已下载小说的原始文档\%%~i\%%i.txt" ..\..\..\整理结果
  200. )
  201. title %TT%-整理完毕
  202. echo                整理完毕
  203. pause
  204. exit

  205. :DownHTML
  206. :: 下载小说各章节页面文件
  207. set "chapter=%~2"
  208. set "chapter=%chapter:*第=%"
  209. set "chapter=%chapter:~0,-2%"
  210. title %TT%-正在下载 "%~1_第 %chapter% 节"
  211. if %lastchapter% lss %chapter% set lastchapter=%chapter%
  212. curl --create-dirs -o "..\..\已下载小说的原始文档\%~1\html\%chapter%.html" "%www%/%~3"
  213. goto :eof

  214. :PickupTXT
  215. :: 按先后顺序提取各章节页面正文并合并之
  216. cls
  217. title %TT%-正在提取 %1
  218. echo.&echo     正在合并各章节,请稍候...
  219. cd.>"..\..\已下载小说的原始文档\%~1\%~1.txt"
  220. for /l %%i in (1,1,%lastchapter%) do (
  221.     title %TT%-正在处理 "%~1\%%i.html"
  222.     findstr /ibc:"  " "..\..\已下载小说的原始文档\%~1\txt\%%i.txt">>"..\..\已下载小说的原始文档\%~1\%~1.txt"
  223.     echo.>>"..\..\已下载小说的原始文档\%~1\%~1.txt"
  224. )
  225. goto :eof

  226. :line
  227. echo.
  228. echo ________________________________________________________________________________
  229. if defined choice (
  230.     echo                退出 X                                返回主界面 M
  231. )
  232. echo.&echo.
  233. goto :eof
复制代码
正文中提到的第三方命令行工具可以在这些地方找到:
  1、Curl.exe:http://curl.haxx.se/(官网)或http://bbs.bathome.net/thread-1761-1-1.html
  2、HtoX32c.exe:http://win32lab.com/(官网,日文)或http://bbs.bathome.net/thread-1974-1-1.html(带中文帮助信息)

  注意:curl.exe需要配合libssl32.dll和libeay32.dll方可使用,若当前机器%windir%中没有这两个dll,请在网上自行搜索下载这两个dll,放到%windir%目录下或curl.exe同一目录下使用——本来想传到论坛上来的,不过压缩了之后仍然达到600多K,上传不到论坛里来,只好作罢,貌似老周也太吝啬了,竟然只给了400K的上传权限,5555。

[ 本帖最后由 namejm 于 2010-2-22 22:28 编辑 ]
2#
发表于 2010-2-11 17:46:00 | 只看该作者
强人啊,原创!
不知/dos时代菜鸟/有何指教?

没完整看,
不了解Curl,我熟悉Wget,
我觉得写段vbs估计会简单的多
回复

使用道具 举报

3#
发表于 2010-2-11 21:50:46 | 只看该作者
dos区重量级人物,支持。
回复

使用道具 举报

4#
发表于 2010-2-14 21:08:25 | 只看该作者
下载了两个文件,生成了CMD文件,但运行之后,只多了几个空文件夹,什么小说也没下载到(所有的菜单都运行了N遍),呵呵,楼主不知你自己测试了没有
回复

使用道具 举报

5#
发表于 2010-2-16 19:04:07 | 只看该作者
相当厉害啊!! 下来看看
回复

使用道具 举报

6#
发表于 2010-2-18 22:55:35 | 只看该作者
原帖由 diwu2005 于 2010-2-14 21:08 发表
下载了两个文件,生成了CMD文件,但运行之后,只多了几个空文件夹,什么小说也没下载到(所有的菜单都运行了N遍),呵呵,楼主不知你自己测试了没有


在批处理前加上 path=%~dp0;%path% 就行了,
回复

使用道具 举报

7#
 楼主| 发表于 2010-2-22 22:30:28 | 只看该作者
  注意:curl.exe需要配合libssl32.dll和libeay32.dll方可使用,若当前机器%windir%中没有这两个dll,请在网上自行搜索下载这两个dll,放到%windir%目录下或curl.exe同一目录下使用——本来想传到论坛上来的,不过压缩了之后仍然达到600多K,上传不到论坛里来,只好作罢,貌似老周也太吝啬了,竟然只给了400K的上传权限,5555。
回复

使用道具 举报

8#
发表于 2010-2-23 00:22:39 | 只看该作者
LS的好久没见踪迹了,批处理的功力还是那样的精湛,另外,单附件400K,你可以用分卷压缩,传多个分卷压缩包不就解决了*^_^*
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 17:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表