春节马上就要到了,貌似只剩下两天时间,在网上如何消遣?down一些txt小说回去慢慢欣赏,是件多么惬意的事情啊。namejm最近在网上转悠了好一阵子,发现一个非常干净的txt小说网站,名叫易读网,抓取txt小说十分方便。狂喜之余,做了个下载易读网txt小说的脚本,以方便广大书虫。
如有什么bug,或有什么好的建议,望各位及时反馈。
重要变动:20100406发现易读网的网址发生了改变,导致以前的代码无法下载任何小说,请各位下载更新后的代码。- @echo off
- :: 功能:
- :: 按照多种方式下载易读网上的txt小说
- :: 实现过程:
- :: 1、下载指定的某篇小说:
- :: 首先下载小说首页,通过首页提取出每一章节的下载地址,然后下载每一章节的html文件,转为txt文本,最后按章节顺序提取正文内容,拼合即可;
- :: 2、根据配置文件下载指定的小说:
- :: 首先,需要在当前脚本所在的文件夹下存在"要下载的小说列表.txt"文件,文件内容按照 "《小说名》"|小说URL 的格式,
- :: 一行一条记录加以保存,前后不可有多余的字符;然后,把这个文件复制到 %destination%\tmp\要下载的小说列表\ 目录下,
- :: 覆盖同名文件,用批处理读取其中的配置,接下来的步骤同1;
- :: 3、下载指定页码上的所有小说:
- :: 首先下载指定页面,把其中各篇小说的首页地址提取出来,接下来的步骤同1;
- :: 4、下载指定页码范围内的所有小说:
- :: 首先下载指定页码范围内的所有页面,接下来的步骤同1;
- :: 5、下载全站的所有小说:
- :: 首先下载全站所有页码上的所有页面,接下来的步骤同1;
-
- mode con lines=26
- :: 20100406发现易读网的网址发生了变化,屏蔽掉旧网址,启用新网址
- :: set www=http://www.yilook.com
- set www=http://www.yi-look.com
- set TT=易读网txt小说下载器
- set destination=易读txt小说
- md "%destination%\tmp\要下载的小说列表\html" 2>nul
- pushd "%destination%\tmp\要下载的小说列表\html"
-
- :Main
- cls
- del /a /f /q *.* 2>nul
- del /a /f /q ..\txt\*.* 2>nul
- title %TT%
- echo.&echo.
- echo 本程序可以按照以下方式下载易读网上的txt小说
- echo.
- echo 易读网首页:%www%
- echo.
- echo 1、下载指定的某篇小说
- echo.
- echo 2、根据配置文件下载指定的小说
- echo.
- echo 3、下载指定页码上的所有小说
- echo.
- echo 4、下载指定页码范围内的所有小说
- echo.
- echo 5、下载全站的所有小说
- echo.
- echo X、退出
- set choice=
- call :line
- set /p choice= 请输入指定功能代码(1/2/3/4/5/X):
- if not defined choice goto Main
- if /i "%choice:~0,1%"=="X" exit
- set "choice=%choice:~0,1%"
- if "%choice%"=="1" goto DownGivenNovel
- if "%choice%"=="2" goto DownGivenNovels
- if "%choice%"=="3" goto DownGivenPage
- if "%choice%"=="4" goto DownGivenPages
- if "%choice%"=="5" goto DownAllPages
- goto Main
-
- :DownGivenNovel
- cls
- title %TT%-指定网址
- echo.&echo.
- echo 请在易读网中找到某篇小说的URL,复制后粘贴到本窗口中使用。
- echo.
- echo 比如,《汉朝的那些事儿》,其URL地址为:
- echo.
- echo %www%/art_7200_8093.html
- echo.
- echo 把以上URL粘贴到本窗口即可下载《汉朝那些事儿》
- echo.
- echo 粘贴方法:鼠标点击右键,然后粘贴,不能使用快捷键Ctrl+V
- call :line
- echo 请在下面输入小说的URL地址:
- echo.
- set URL=
- set /p URL=
- if not defined URL goto DownGivenNovel
- if /i "%URL:~0,1%"=="X" exit
- if /i "%URL:~0,1%"=="M" goto Main
- curl -O %URL%
- htox32c /IP /O0 *.html
- for /f "tokens=3" %%i in ('findstr "TITLE" "*.txt"') do echo "%%i"^|%URL%>..\要下载的小说列表.txt
- goto DownNovel
-
- :DownGivenNovels
- cls
- title %TT%-配置下载文件清单
- echo.&echo.
- echo 请确认当前目录下存在"要下载的小说列表.txt"文件
- echo.
- echo 并且该文件中的内容为 "《小说名》"^|小说目录页URL 的格式
- echo.
- echo 一行一条记录,前后不可有多余字符。如:
- echo.
- echo "《寻人启事》"^|%www%/art_7238_6170.html
- echo.
- echo 若不满足如上条件,请自行配置好后方可使用本功能
- call :line
- echo.
- set next=
- set /p next= 要继续下一步吗?(Y/N):
- if not exist ..\..\..\..\要下载的小说列表.txt goto DownGivenNovels
- if not defined next goto DownGivenNovels
- set "next=%next:~0,1%"
- if /i "%next%"=="X" exit
- if /i "%next%"=="M" goto Main
- if /i "%next%"=="Y" (
- copy /y ..\..\..\..\要下载的小说列表.txt ..\
- goto DownNovel
- )
- goto DownGivenNovels
-
- :DownGivenPage
- cls
- title %TT%-指定页码
- echo.&echo.&echo.&echo.
- echo 您可以指定某一页码,本脚本将下载易读网上这一页内
- echo.
- echo 列出的所有小说
- echo.
- echo 如:输入3,将下载这一页面所列出的所有小说:
- echo.
- echo %www%/artlist_3.html
- call :line
- set page=
- set /p page= 请输入指定页码:
- if not defined page goto DownGivenPage
- if /i "%page:~0,1%"=="X" exit
- if /i "%page:~0,1%"=="M" goto Main
- curl -O %www%/artlist_%page%.html
- goto HTMLtoTXT
-
- :DownGivenPages
- cls
- title %TT%-指定页码范围
- echo.&echo.
- echo 您可以指定某一页码范围,本脚本将下载易读网上这些页内
- echo.
- echo 列出的所有小说
- echo.
- echo 注意:起止页码必须用半角状态下的短横杠连接。
- echo.
- echo 如:输入 3-5,将下载易读网上下列页面内列出的所有小说:
- echo.
- echo %www%/artlist_3.html
- echo %www%/artlist_4.html
- echo %www%/artlist_5.html
- call :line
- set pages=
- set /p pages= 请输入指定页码的范围(如3-5):
- if not defined pages goto DownGivenPages
- if /i "%pages%"=="X" exit
- if /i "%pages%"=="M" goto Main
- curl -O "%www%/artlist_[%pages%].html"
- goto HTMLtoTXT
-
- :DownAllPages
- cls
- title %TT%-下载全站小说
- curl -O %www%/artlist_1.html
- htox32c /IP /O0 /U1+4 artlist_1.html
- cls
- for /f "tokens=6" %%i in ('findstr /i "第.*页" artlist_1.txt') do (
- curl -O "%www%/artlist_[2-%%i].html"
- )
-
- :HTMLtoTXT
- cls
- title %TT%-网页转换为txt
- htox32c /IP /O0 /U1+4 *.html
- md ..\txt 2>nul
- del /a /f /q ..\txt\*.*
- move *.txt ..\txt>nul
-
- :PickupList
- cls
- echo.&echo 正在生成要下载的小说列表,请稍候...
- cd.>..\要下载的小说列表.txt
- for %%i in (..\txt\*.txt) do (
- title %TT%-生成下载列表_%%~nxi
- for /f "delims=<'> tokens=1,2" %%j in ('findstr /i "《.*》" "%%i"') do (
- echo "%%j"^|%www%/%%k>>..\要下载的小说列表.txt
- )
- )
-
- :DownNovel
- cls
- title %TT%-下载小说
- echo.&echo.
- echo 正在下载小说,请稍候...
- md ..\..\..\整理结果 2>nul
- :: del /a /f /q ..\..\..\整理结果\*.*
- :: rd /q /s ..\..\已下载小说的原始文档
- md ..\..\已下载小说的原始文档 2>nul
- for /f "delims=| tokens=1,2" %%i in (..\要下载的小说列表.txt) do (
- curl --create-dirs -o "..\..\已下载小说的原始文档\%%~i\index.html" "%%~j"
- htox32c /IP /O0 /U1+4 "..\..\已下载小说的原始文档\%%~i\index.html"
- cls
- set lastchapter=1
- for /f "delims=' tokens=1,2" %%x in ('findstr /i "第.*节" "..\..\已下载小说的原始文档\%%~i\index.txt"') do (
- call :DownHTML "%%~i" "%%~x" "%%~y"
- )
- pushd "..\..\已下载小说的原始文档\%%~i\html"
- htox32c /IP /O0 *.html
- popd
- md "..\..\已下载小说的原始文档\%%~i\txt" 2>nul
- move "..\..\已下载小说的原始文档\%%~i\html\*.txt" "..\..\已下载小说的原始文档\%%~i\txt"
- call :PickupTXT "%%~i"
- move "..\..\已下载小说的原始文档\%%~i\%%i.txt" ..\..\..\整理结果
- )
- title %TT%-整理完毕
- echo 整理完毕
- pause
- goto Main
-
- :DownHTML
- :: 下载小说各章节页面文件
- set "chapter=%~2"
- set "chapter=%chapter:*第=%"
- set "chapter=%chapter:~0,-2%"
- title %TT%-正在下载 "%~1_第 %chapter% 节"
- if %lastchapter% lss %chapter% set lastchapter=%chapter%
- curl --create-dirs -o "..\..\已下载小说的原始文档\%~1\html\%chapter%.html" "%www%/%~3"
- goto :eof
-
- :PickupTXT
- :: 按先后顺序提取各章节页面正文并合并之
- cls
- title %TT%-正在提取 %1
- echo.&echo 正在合并各章节,请稍候...
- cd.>"..\..\已下载小说的原始文档\%~1\%~1.txt"
- for /l %%i in (1,1,%lastchapter%) do (
- title %TT%-正在处理 "%~1\%%i.html"
- findstr /ibc:" " "..\..\已下载小说的原始文档\%~1\txt\%%i.txt">>"..\..\已下载小说的原始文档\%~1\%~1.txt"
- echo.>>"..\..\已下载小说的原始文档\%~1\%~1.txt"
- )
- goto :eof
-
- :line
- echo.
- echo ________________________________________________________________________________
- if defined choice (
- echo 退出 X 返回主界面 M
- )
- echo.&echo.
- 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同一目录下使用。 |