标题: [网络工具] 批处理版易读网txt小说下载器[20100407] [打印本页]
作者: namejm 时间: 2010-2-11 13:08 标题: 批处理版易读网txt小说下载器[20100407]
春节马上就要到了,貌似只剩下两天时间,在网上如何消遣?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同一目录下使用。
作者: slovent 时间: 2010-2-11 16:48
已经在使用了,感觉非常好,而且从中学到一些技巧,只是还需要慢慢消化。
作者: zjw767676 时间: 2010-2-12 14:23
选1
选2
作者: hlzj88 时间: 2010-2-13 05:32
只是我的机上curl.exe和HtoX32c.exe都无法运行,一闪而过,或许是我的错,我是把三个文件都放在同一个文件夹里
作者: gdmm 时间: 2010-2-16 20:20
可以用呀,把curl.exe和HtoX32c.exe放到\WINDOWS\system32文件夹中就行了,试了很好用。
作者: asdfgmyj 时间: 2010-2-18 09:30
好像没有用的???是吗???
作者: gdmm 时间: 2010-2-18 17:16
绝对能用,唯一美中不足就是整理合并后的文本内容中没有了第几章的分开
阅读起来不是很习惯,应该是网页转回文本后,在提取文本内容合并时没有提取第几章这个
不知是否能改动一下。
作者: x9tiancmd 时间: 2010-2-18 23:02
在批处理前加上 path=%~dp0;%path%
就ok了嘛
作者: gdmm 时间: 2010-2-19 21:06
原帖由 x9tiancmd 于 2010-2-18 23:02 发表
在批处理前加上 path=%~dp0;%path%
就ok了嘛
试了好像不行呀,还是没能提取第几章这些出来合并。
呵呵,我看错了,原来不是回复我提出的那个问题的。
[ 本帖最后由 gdmm 于 2010-2-19 21:08 编辑 ]
作者: namejm 时间: 2010-2-22 22:16
找到了下载不到文件的原因:curl.exe需要配合libssl32.dll和libeay32.dll方可使用,若当前机器%windir%中没有这两个dll,请下载顶楼提到的dll,放到%windir%目录下或curl.exe同一目录下使用。
作者: P_Ricky 时间: 2010-4-12 14:53
这个太厉害了,需要支持的
作者: sinianyangyang 时间: 2010-4-23 13:50
楼主真是太牛了,佩服,希望以后多多指点。呵呵。
作者: zilove 时间: 2010-4-28 04:11
太厉害了。呵呵。下载阿
作者: sig13 时间: 2010-4-28 17:54
我用vbs写了一个很傻的,但是没有用到第三方。主要是练习vbs的。
增加了两处错误处理,不是那么容易死了。- '比较傻的 Load http://www.yi-look.com/ 文本小说的脚本,代码是根据该网页特征写的
- '即,该脚本只能用于 yilook 上的 Load
- '必须进入到要 Load 的小说的首页,复制下 URL,作为参数运行该脚本,用如下命令
- 'cscript //Nologo //E:vbscript gyilook.vbs http://www.yi-look.com/art_??_??.html
- '会在脚本当前目录下生成一个小说名的目录,里面按照 "第??节.txt" 保存文件
- Option Explicit
-
- Dim regExUrl
- Set regExUrl = new RegExp
- regExUrl.Pattern= "http://www.yi-look.com/art_\d+_\d+.html"
-
- If regExUrl.Test(WScript.Arguments(0)) = False Then
- Wscript.echo "Maybe Not yi-look's URL?"
- WScript.Quit
- End If
-
- Set regExUrl = Nothing
-
- Dim loadPage
- Dim oDom
-
- Do
- Wscript.echo "Loading the first page..."
- set oDom = WScript.GetObject(WScript.Arguments(0))
- loadPage = WaitLoading(oDom)
- loop While loadPage = False
-
- Dim dirName
-
- Dim e
- For each e in oDom.all
- If e.tagName = "TITLE" Then
- If Right(e.outerText, 2) = "易读" Then
- dirName = Left(e.outerText, (Len(e.outerText) - 3))
- Exit For
- Else
- Wscript.echo "Maybe Not real yi-look's URL?"
- WScript.Quit
- End If
- End If
- Next
-
- Dim fso
-
- Set fso = CreateObject("Scripting.FileSystemObject")
- Do While fso.FolderExists(dirName)
- dirName = dirName & "0"
- Loop
-
- fso.CreateFolder(dirName)
- Set fso = Nothing
-
- Dim regEx
- Set regEx = new RegExp
- regEx.Pattern= "第\d+节"
-
- Dim lnk
- For each lnk in oDom.links
- If (regEx.Test(lnk.outerText)) Then
- Dim oDomX
-
- Do
- Wscript.echo "Loading " & lnk.outerText & "... " & lnk.href
- On Error Resume Next
- Set oDomX = WScript.GetObject(lnk.href)
- If Err.Number = 0 Then
- loadPage = WaitLoading(oDomX)
- Else
- Wscript.echo "ERROR #" & CStr(Err.Number) & " " & Err.Description
- Wscript.echo "Try again!!!"
- Err.clear
- loadPage = False
- End If
- loop While loadPage = False
-
- Dim fn
- fn = dirName & "\" & lnk.outerText & ".txt"
- Call WriteTextFile(fn, oDomX.body.outerText)
- Set oDomX = Nothing
- End If
- Next
-
- Set oDom = Nothing
- Set regEx = Nothing
-
- Function WaitLoading(DomObj)
- Const TickOut = 60
- Dim tick
- tick = 0
-
- Do until DomObj.readyState = "complete"
- tick = tick + 1
-
- If tick > TickOut Then
- WScript.echo "Timed out! Load failed... Try again! "
- Exit Do
- End If
-
- WScript.sleep 500
- Loop
-
- WaitLoading = (tick <= TickOut)
- End Function
-
- Sub WriteTextFile(FileName, TextString)
- Const ForReading = 1, ForWriting = 2, ForAppending = 8
- Dim fso, f
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set f = fso.OpenTextFile(FileName, ForWriting, True, -1)
- f.Write TextString
- f.Close
- Set fso = Nothing
- Set f = Nothing
- End Sub
复制代码
[ 本帖最后由 sig13 于 2010-4-29 18:30 编辑 ]
作者: sig13 时间: 2010-4-29 09:19
我才调试完,yi-look就又被关了,什么世道?
不是我一个人连不上吧?
---
居然又开了,之前的脚本在load页面失败之后就挂了,增加了纠错功能,现在应该没问题了
[ 本帖最后由 sig13 于 2010-4-29 15:40 编辑 ]
作者: wudahht 时间: 2010-5-4 16:06
楼主强悍啊……慢慢学习消化一下
作者: zjw767676 时间: 2010-5-23 19:16
[attach]2563[/attach]
作者: a794685135 时间: 2010-5-31 00:59
闲得蛋疼,整了个中文的,
功能没全,大家莫笑,呵
- @echo off
- :初始化
- set 设定=set
- %设定% 召唤=call
- %召唤% :设置
-
- :开始
- %设定标题% 易读下载器
- %打开网址% http://www.yi-look.com/
- %显示% 格式:http://www.yi-look.com/art_7826_3170.html
- %显示% 在下面粘贴如上所示[小说目录网址]并回车
- %设定%/p 小说网址=:
-
- :获取下载列表
- %设定标题% 正在获取下载列表
- %循环% /f "%取第几个%=3 %分隔符%=/" %%i in ("%小说网址%") do %设定% 目录文件=%%i
- %下载% %小说网址% >目录文件\%目录文件%
- %判断% %不% %存在文件% 目录文件\%目录文件% %显示% 下载目录出错!& %暂停% & %跳转到% %结束%
- %转换% 目录文件\%目录文件%
- %循环% /f %%i in ("%目录文件%") do %设定% 目录列表=%%~ni.txt
- %循环% /f "%取第几个%=3 %分隔符%= " %%i in ('%显示文件内容% 目录文件\%目录列表% ^|%查找% "TITLE "') do %设定% 小说名字=%%i
- %循环% /f "%取第几个%=3 %分隔符%=:" %%i in ('%显示文件内容% 目录文件\%目录列表% ^|%查找% "作者:"') do (
- %循环% /f "%取第几个%=2 %分隔符%=[]" %%j in ('%显示% %%i') do %设定% 小说名字+=%%j\%小说名字%
- )
- %创建目录% 小说文件\%小说名字+%\网页单章 小说文件\%小说名字+%\文本单章 %不显示任何信息%
- %清空屏幕%
-
- :开始下载
- %循环% /f "%取第几个%=1,2 %分隔符%=<'" %%a in ('%显示文件内容% 目录文件\%目录列表% ^|%查找% /i "节<'read"') do %召唤% :设定下载 %%a %%b
- %转换% 小说文件\%小说名字+%\网页单章\*.html %不显示任何信息%
- %移动% 小说文件\%小说名字+%\网页单章\*.txt 小说文件\%小说名字+%\文本单章\ %不显示任何信息%
- >小说文件\%小说名字+%\%小说名字%.txt %显示% %小说名字%
- %循环% /l %%i in (1 1 %最后一章%) do (
- >>小说文件\%小说名字+%\%小说名字%.txt %显示% 第%%i节
- >>小说文件\%小说名字+%\%小说名字%.txt %显示文件内容% 小说文件\%小说名字+%\文本单章\%%i.txt
- )
- %清空屏幕%
-
- %显示% 一切搞定!
- pause %不显示任何信息%
- %跳转到% %结束%
-
- :设定下载
- %设定% "章节序号=%~1"
- %设定% "章节序号=%章节序号:*第=%"
- %设定% "章节序号=%章节序号:~0,-1%"
- %设定% 最后一章=%章节序号%
- %设定标题% 正在下载 %小说名字% %章节序号%
- %下载% %网址%%~2 >小说文件\%小说名字+%\网页单章\%章节序号%.html
- %跳转到% %结束%
-
- :设置
- %设定% 删除目录=rd
- %设定% 创建目录=md
- %设定% 显示=echo
- %设定% 循环=for
- %设定% 取第几个=tokens
- %设定% 分隔符=delims
- %设定% 下载=curl
- %设定% 判断=if
- %设定% 不=not
- %设定% 不等于=NEQ
- %设定% 存在文件=exist
- %设定% 暂停=pause
- %设定% 跳转到=goto
- %设定% 结束=:eof
- %设定% 转换=htox32c /IP /O0 /U1+4
- %设定% 显示文件内容=type
- %设定% 查找=find
- %设定% "不显示任何信息=>nul 2>nul"
- %设定% 移动=move
- %设定% 清空屏幕=cls
- %设定% 设定标题=title
- %设定% 网址=http://www.yi-look.com/
- %设定% 打开网址=Start iexplore.exe
- %创建目录% 目录文件 %不显示任何信息%
- %创建目录% 小说文件 %不显示任何信息%
- %跳转到% %结束%
复制代码
作者: a794685135 时间: 2010-5-31 01:17
应该把 判断 改成 如果 ,那样就成了
%如果% %不% %存在文件% 目录文件\%目录文件% %显示% 下载目录出错!
这样是不是很好理解?啊哈哈哈
作者: liukevin 时间: 2010-7-30 20:25
不错,学习了。感谢楼主的分享
作者: dnf_lf 时间: 2010-8-6 22:09
这个我不知道怎么用,楼主能帮忙说的详细些吗
作者: dnf_lf 时间: 2010-8-6 22:30
不知道这个东西对其他网站的适用吗
作者: cuipengfei 时间: 2010-10-9 18:37
不行啊! 到这里就没有反应了,txt也没下载下来!
作者: cuipengfei 时间: 2010-10-9 18:38
到这里就没有反应了,txt也没有下载下来! 怎么回事啊?
作者: ckgez 时间: 2010-10-27 07:56
BT 。。。好有动力撒
作者: rockets 时间: 2010-11-16 13:50
太棒了这个东东,BAT - Beautiful, Amazing, Tool
作者: bat123 时间: 2010-11-26 11:41
看起来 很给力 试用下
作者: songyunhmiLY 时间: 2010-12-1 23:16 标题: 正在学习
非常好,学习中,感谢
作者: 女孩不哭 时间: 2011-1-8 02:37
其实命令行下载工具很多的,不用动用额外的几个动态链接库。
作者: liaobin 时间: 2011-4-3 12:57
加了一句果然好用
作者: liaobin 时间: 2011-4-3 12:57
加了一句果然好用
作者: bbwanwt123 时间: 2011-4-9 17:51
哇········可以用的吗
作者: bawed 时间: 2011-6-10 12:41
不错 很好的学习了 !!!
作者: ggehuliang 时间: 2011-11-27 08:59
用不了啊!给个说明?
作者: HAT 时间: 2011-11-27 10:26
回复 36# ggehuliang
戴上眼镜,多看几遍,尤其是最后的一段。
作者: dlx 时间: 2012-11-2 10:38
本帖最后由 dlx 于 2012-11-2 10:41 编辑
请教楼主,现在这个批处理还能用吗?
我试了一下,没有下到文件
temp目下txt文件为“
TITLE : 302 Found
Found
The document has moved here.
”
作者: 再世情緣 时间: 2012-12-22 09:12
现在易读网网址改变了,所以不能用了,新的易读网网址为www.yi-see.com,把批处理中对应的那个www变量值改下就行了
作者: 潇洒飞鱼 时间: 2013-5-5 11:57
看不懂0W0<悲剧>
作者: xss 时间: 2013-8-28 16:15
又学习到了新技术,感谢楼主分享!
作者: 我是小白 时间: 2014-9-7 16:50
del /a /f /q *.* 2>nul
del /a /f /q ..\txt\*.* 2>nul
虽然看不懂,但是我复制着玩把我桌面带后缀的文件都删了,气死我了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |