标题: [文本处理] [已解决]批处理如何实现下载三七中文网某个指定小说的最新章节? [打印本页]
作者: Blitz 时间: 2016-11-29 21:22 标题: [已解决]批处理如何实现下载三七中文网某个指定小说的最新章节?
本帖最后由 pcl_test 于 2016-11-30 18:51 编辑
我是新手,前几天刚接触wget和HtoX32c,于是想写一个自动下载小说最新章节的批处理
思路是用wget下载某个网页的源码,从中找出最新章节的地址,再用wget下载,最后HtoX32c转换
比如说看《大主宰》,可以用wget下载这个网页的源码http://www.37zw.com/0/330/,这个网址是不变的,保存为1.html
1.html中的一行:<meta property="og:novel:latest_chapter_url" content="http://www.37zw.com/0/330/4329753.html"/>,其中的http.....43297553.html就是最新章节的地址
其他方面都成功了,但是不知道怎么获取这个最新章节的地址,1.html中不止这一个链接地址
或者有更好的方法也请教教我
作者: pcl_test 时间: 2016-11-29 21:46
findstr "latest_chapter_url" "1.html"
再用for提取
作者: CommandBatCmd 时间: 2016-11-29 21:53
回复 1# Blitz
把代码发上来,让坛友们帮你看看怎样添加,在那个地方添加,才能解决你的这个问题。
作者: Blitz 时间: 2016-11-29 22:25
本帖最后由 Blitz 于 2016-11-29 22:28 编辑
回复 2# pcl_test
谢谢,但是还是不太懂。。。能详细点吗
作者: Blitz 时间: 2016-11-29 22:27
本帖最后由 Blitz 于 2016-11-29 22:30 编辑
回复 3# CommandBatCmd - @echo off
- set /p as=请输入网址:
- cd C:\Users\Administrator\Desktop
- wget -O 1.txt %as%
- HtoX32c /IP 1.txt>2.txt
- del 1.txt
-
- setlocal Enabledelayedexpansion //从这里往下是从网上找的,作用是取章节的标题作为文件名
- call :G_getrowstr 18 2.txt kk
- ren 2.txt "%kk%.txt"
- exit
- :G_getrowstr
- set %3=
- set /A G_skiprows=%1-1
- if "%G_skiprows%"=="0" goto :G_getrowstrz
- for /f "skip=%G_skiprows% delims=" %%i in ('findstr /n .* %2') do (
- for /f "tokens=2* delims=:" %%j in ("%%i") do set %3=%%j
- ::if "%%i"=="%1:" set %3=空白行
- goto :eof
- )
- :G_getrowstrz
- for /f "delims=" %%i in ('findstr /n .* %2') do (
- for /f "tokens=2* delims=:" %%j in ("%%i") do set %3=%%j
- goto :eof
- )
复制代码
这就是要输入最新章节的地址才行
作者: happy886rr 时间: 2016-11-29 22:32
好在meta标签比较靠前,要不还真能把for累死~!- @echo off&for /f tokens^=1-4^ delims^=^" %%a in (1.html) do (if [%%b]==[og:novel:latest_chapter_url] (set/p=%%d&exit))
复制代码
作者: Blitz 时间: 2016-11-29 22:48
回复 6# happy886rr
试了,成功了,非常感谢!!!
作者: happy886rr 时间: 2016-11-29 22:49
回复 7# Blitz
你的代码太臃肿,连下载转码其实3行就能搞定。
作者: Blitz 时间: 2016-11-29 22:52
回复 8# happy886rr
其实主要的代码就是这几句- cd C:\Users\Administrator\Desktop
- wget -O 1.txt %as%
- HtoX32c /IP 1.txt>2.txt
- del 1.txt
复制代码
后面的是从网上找的,获取文件的第18行重命名文件
请问该怎么改
作者: happy886rr 时间: 2016-11-29 23:03
本帖最后由 happy886rr 于 2016-11-29 23:05 编辑
回复 9# Blitz
就我那条,改改中括号里的内容,连重命名都能一行实现,那是批处理实现的选择器,几乎可以筛选绝大多数网页内容。
作者: Blitz 时间: 2016-11-29 23:10
回复 10# happy886rr
哦哦,谢谢
作者: pcl_test 时间: 2016-11-30 18:49
- mshta http://bathome.net/s/hta/index.html "var url=web('http://www.37zw.com/0/330/').match(/<meta.+?latest_chapter_url.+?\""([^""]+)/)[1];web(url).match(/<div id=\""content\"">[\s\S]+?<\/div>/)[0].replace(/<br ?\/>/g,'\r\n').replace(/ /g,' ').replace(/<[^<]*?>/g,'')"
- pause
复制代码
作者: Blitz 时间: 2016-12-1 00:51
本帖最后由 Blitz 于 2016-12-1 00:59 编辑
回复 12# pcl_test
谢谢,代码很简短,而且效果也很好,但是弹出的消息框好像不能下滑,看不了下面的内容
作者: pcl_test 时间: 2016-12-1 04:23
回复 13# Blitz
重定向到文本即可
作者: Blitz 时间: 2016-12-1 18:51
回复 14# pcl_test
哦哦
作者: 小小菜鸟 时间: 2016-12-1 20:04
回复 6# happy886rr
我想问一下,如果是没有格式化的html怎么提取呢。
作者: happy886rr 时间: 2016-12-1 20:23
本帖最后由 happy886rr 于 2016-12-1 20:26 编辑
回复 16# 小小菜鸟
你是指没有回车符或缩进的html吗?一样的,我的代码之前测试过,没缩进照样提取,它是按双引号来的。最多用个- if not "!str:子串=!"=="!str!"
复制代码
即可判别是否含有子串。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |