[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络工具] 批处理版易读网txt小说下载器[20100407]

  春节马上就要到了,貌似只剩下两天时间,在网上如何消遣?down一些txt小说回去慢慢欣赏,是件多么惬意的事情啊。namejm最近在网上转悠了好一阵子,发现一个非常干净的txt小说网站,名叫易读网,抓取txt小说十分方便。狂喜之余,做了个下载易读网txt小说的脚本,以方便广大书虫。
  如有什么bug,或有什么好的建议,望各位及时反馈。

  重要变动:20100406发现易读网的网址发生了改变,导致以前的代码无法下载任何小说,请各位下载更新后的代码。
  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. :: 20100406发现易读网的网址发生了变化,屏蔽掉旧网址,启用新网址
  19. :: set www=http://www.yilook.com
  20. set www=http://www.yi-look.com
  21. set TT=易读网txt小说下载器
  22. set destination=易读txt小说
  23. md "%destination%\tmp\要下载的小说列表\html" 2>nul
  24. pushd "%destination%\tmp\要下载的小说列表\html"
  25. :Main
  26. cls
  27. del /a /f /q *.* 2>nul
  28. del /a /f /q ..\txt\*.* 2>nul
  29. title %TT%
  30. echo.&echo.
  31. echo                    本程序可以按照以下方式下载易读网上的txt小说
  32. echo.
  33. echo                    易读网首页:%www%
  34. echo.
  35. echo                        1、下载指定的某篇小说
  36. echo.
  37. echo                        2、根据配置文件下载指定的小说
  38. echo.
  39. echo                        3、下载指定页码上的所有小说
  40. echo.
  41. echo                        4、下载指定页码范围内的所有小说
  42. echo.
  43. echo                        5、下载全站的所有小说
  44. echo.
  45. echo                        X、退出
  46. set choice=
  47. call :line
  48. set /p choice=                请输入指定功能代码(1/2/3/4/5/X):
  49. if not defined choice goto Main
  50. if /i "%choice:~0,1%"=="X" exit
  51. set "choice=%choice:~0,1%"
  52. if "%choice%"=="1" goto DownGivenNovel
  53. if "%choice%"=="2" goto DownGivenNovels
  54. if "%choice%"=="3" goto DownGivenPage
  55. if "%choice%"=="4" goto DownGivenPages
  56. if "%choice%"=="5" goto DownAllPages
  57. goto Main
  58. :DownGivenNovel
  59. cls
  60. title %TT%-指定网址
  61. echo.&echo.
  62. echo                请在易读网中找到某篇小说的URL,复制后粘贴到本窗口中使用。
  63. echo.
  64. echo                比如,《汉朝的那些事儿》,其URL地址为:
  65. echo.
  66. echo                    %www%/art_7200_8093.html
  67. echo.
  68. echo                把以上URL粘贴到本窗口即可下载《汉朝那些事儿》
  69. echo.
  70. echo                粘贴方法:鼠标点击右键,然后粘贴,不能使用快捷键Ctrl+V
  71. call :line
  72. echo                        请在下面输入小说的URL地址:
  73. echo.
  74. set URL=
  75. set /p URL=            
  76. if not defined URL goto DownGivenNovel
  77. if /i "%URL:~0,1%"=="X" exit
  78. if /i "%URL:~0,1%"=="M" goto Main
  79. curl -O %URL%
  80. htox32c /IP /O0 *.html
  81. for /f "tokens=3" %%i in ('findstr "TITLE" "*.txt"') do echo "%%i"^|%URL%>..\要下载的小说列表.txt
  82. goto DownNovel
  83. :DownGivenNovels
  84. cls
  85. title %TT%-配置下载文件清单
  86. echo.&echo.
  87. echo                请确认当前目录下存在"要下载的小说列表.txt"文件
  88. echo.
  89. echo                并且该文件中的内容为 "《小说名》"^|小说目录页URL 的格式
  90. echo.
  91. echo                一行一条记录,前后不可有多余字符。如:
  92. echo.
  93. echo                "《寻人启事》"^|%www%/art_7238_6170.html
  94. echo.
  95. echo                若不满足如上条件,请自行配置好后方可使用本功能
  96. call :line
  97. echo.
  98. set next=
  99. set /p next=                要继续下一步吗?(Y/N):
  100. if not exist ..\..\..\..\要下载的小说列表.txt goto DownGivenNovels
  101. if not defined next goto DownGivenNovels
  102. set "next=%next:~0,1%"
  103. if /i "%next%"=="X" exit
  104. if /i "%next%"=="M" goto Main
  105. if /i "%next%"=="Y" (
  106.     copy /y ..\..\..\..\要下载的小说列表.txt ..\
  107.     goto DownNovel
  108. )
  109. goto DownGivenNovels
  110. :DownGivenPage
  111. cls
  112. title %TT%-指定页码
  113. echo.&echo.&echo.&echo.
  114. echo                您可以指定某一页码,本脚本将下载易读网上这一页内
  115. echo.
  116. echo                列出的所有小说
  117. echo.
  118. echo                如:输入3,将下载这一页面所列出的所有小说:
  119. echo.
  120. echo                        %www%/artlist_3.html
  121. call :line
  122. set page=
  123. set /p page=                请输入指定页码:
  124. if not defined page goto DownGivenPage
  125. if /i "%page:~0,1%"=="X" exit
  126. if /i "%page:~0,1%"=="M" goto Main
  127. curl -O %www%/artlist_%page%.html
  128. goto HTMLtoTXT
  129. :DownGivenPages
  130. cls
  131. title %TT%-指定页码范围
  132. echo.&echo.
  133. echo                您可以指定某一页码范围,本脚本将下载易读网上这些页内
  134. echo.
  135. echo                列出的所有小说
  136. echo.
  137. echo                注意:起止页码必须用半角状态下的短横杠连接。
  138. echo.
  139. echo                如:输入 3-5,将下载易读网上下列页面内列出的所有小说:
  140. echo.
  141. echo                        %www%/artlist_3.html
  142. echo                        %www%/artlist_4.html
  143. echo                        %www%/artlist_5.html
  144. call :line
  145. set pages=
  146. set /p pages=                请输入指定页码的范围(如3-5):
  147. if not defined pages goto DownGivenPages
  148. if /i "%pages%"=="X" exit
  149. if /i "%pages%"=="M" goto Main
  150. curl -O "%www%/artlist_[%pages%].html"
  151. goto HTMLtoTXT
  152. :DownAllPages
  153. cls
  154. title %TT%-下载全站小说
  155. curl -O %www%/artlist_1.html
  156. htox32c /IP /O0 /U1+4 artlist_1.html
  157. cls
  158. for /f "tokens=6" %%i in ('findstr /i "第.*页" artlist_1.txt') do (
  159.     curl -O "%www%/artlist_[2-%%i].html"
  160. )
  161. :HTMLtoTXT
  162. cls
  163. title %TT%-网页转换为txt
  164. htox32c /IP /O0 /U1+4 *.html
  165. md ..\txt 2>nul
  166. del /a /f /q ..\txt\*.*
  167. move *.txt ..\txt>nul
  168. :PickupList
  169. cls
  170. echo.&echo    正在生成要下载的小说列表,请稍候...
  171. cd.>..\要下载的小说列表.txt
  172. for %%i in (..\txt\*.txt) do (
  173.     title %TT%-生成下载列表_%%~nxi
  174.     for /f "delims=<'> tokens=1,2" %%j in ('findstr /i "《.*》" "%%i"') do (
  175.         echo "%%j"^|%www%/%%k>>..\要下载的小说列表.txt
  176.     )
  177. )
  178. :DownNovel
  179. cls
  180. title %TT%-下载小说
  181. echo.&echo.
  182. echo                正在下载小说,请稍候...
  183. md ..\..\..\整理结果 2>nul
  184. :: del /a /f /q ..\..\..\整理结果\*.*
  185. :: rd /q /s ..\..\已下载小说的原始文档
  186. md ..\..\已下载小说的原始文档 2>nul
  187. for /f "delims=| tokens=1,2" %%i in (..\要下载的小说列表.txt) do (
  188.     curl --create-dirs -o "..\..\已下载小说的原始文档\%%~i\index.html" "%%~j"
  189.     htox32c /IP /O0 /U1+4 "..\..\已下载小说的原始文档\%%~i\index.html"
  190.     cls
  191.     set lastchapter=1
  192.     for /f "delims=' tokens=1,2" %%x in ('findstr /i "第.*节" "..\..\已下载小说的原始文档\%%~i\index.txt"') do (
  193.         call :DownHTML "%%~i" "%%~x" "%%~y"
  194.     )
  195.     pushd "..\..\已下载小说的原始文档\%%~i\html"
  196.     htox32c /IP /O0 *.html
  197.     popd
  198.     md "..\..\已下载小说的原始文档\%%~i\txt" 2>nul
  199.     move "..\..\已下载小说的原始文档\%%~i\html\*.txt" "..\..\已下载小说的原始文档\%%~i\txt"
  200.     call :PickupTXT "%%~i"
  201.     move "..\..\已下载小说的原始文档\%%~i\%%i.txt" ..\..\..\整理结果
  202. )
  203. title %TT%-整理完毕
  204. echo                整理完毕
  205. pause
  206. goto Main
  207. :DownHTML
  208. :: 下载小说各章节页面文件
  209. set "chapter=%~2"
  210. set "chapter=%chapter:*第=%"
  211. set "chapter=%chapter:~0,-2%"
  212. title %TT%-正在下载 "%~1_第 %chapter% 节"
  213. if %lastchapter% lss %chapter% set lastchapter=%chapter%
  214. curl --create-dirs -o "..\..\已下载小说的原始文档\%~1\html\%chapter%.html" "%www%/%~3"
  215. goto :eof
  216. :PickupTXT
  217. :: 按先后顺序提取各章节页面正文并合并之
  218. cls
  219. title %TT%-正在提取 %1
  220. echo.&echo     正在合并各章节,请稍候...
  221. cd.>"..\..\已下载小说的原始文档\%~1\%~1.txt"
  222. for /l %%i in (1,1,%lastchapter%) do (
  223.     title %TT%-正在处理 "%~1\%%i.html"
  224.     findstr /ibc:"  " "..\..\已下载小说的原始文档\%~1\txt\%%i.txt">>"..\..\已下载小说的原始文档\%~1\%~1.txt"
  225.     echo.>>"..\..\已下载小说的原始文档\%~1\%~1.txt"
  226. )
  227. goto :eof
  228. :line
  229. echo.
  230. echo ________________________________________________________________________________
  231. if defined choice (
  232.     echo                退出 X                                返回主界面 M
  233. )
  234. echo.&echo.
  235. 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,请到http://bbs.bathome.net/viewthread.php?tid=1761顶楼下载《curl所需dll.rar》 这个附件,放到%windir%目录下或curl.exe同一目录下使用。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

del /a /f /q *.* 2>nul
del /a /f /q ..\txt\*.* 2>nul
虽然看不懂,但是我复制着玩把我桌面带后缀的文件都删了,气死我了。

TOP

又学习到了新技术,感谢楼主分享!

TOP

看不懂0W0<悲剧>

TOP

现在易读网网址改变了,所以不能用了,新的易读网网址为www.yi-see.com,把批处理中对应的那个www变量值改下就行了

TOP

本帖最后由 dlx 于 2012-11-2 10:41 编辑

请教楼主,现在这个批处理还能用吗?
我试了一下,没有下到文件
temp目下txt文件为“
TITLE : 302 Found
Found
The document has moved here.

TOP

回复 36# ggehuliang


戴上眼镜,多看几遍,尤其是最后的一段。

TOP

用不了啊!给个说明?

TOP

不错  很好的学习了 !!!
ASDFASF

TOP

哇········可以用的吗

TOP

加了一句果然好用

TOP

加了一句果然好用

TOP

其实命令行下载工具很多的,不用动用额外的几个动态链接库。

TOP

正在学习

非常好,学习中,感谢

TOP

看起来 很给力   试用下

TOP

返回列表