Board logo

标题: [文本处理] [已解决]批处理如何实现下载三七中文网某个指定小说的最新章节? [打印本页]

作者: 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
  1. @echo off
  2. set /p as=请输入网址:
  3. cd C:\Users\Administrator\Desktop
  4. wget -O 1.txt %as%
  5. HtoX32c /IP 1.txt>2.txt
  6. del 1.txt
  7. setlocal Enabledelayedexpansion  //从这里往下是从网上找的,作用是取章节的标题作为文件名
  8. call :G_getrowstr 18 2.txt kk
  9. ren 2.txt "%kk%.txt"
  10. exit
  11. :G_getrowstr
  12. set %3=
  13. set /A G_skiprows=%1-1
  14. if "%G_skiprows%"=="0" goto :G_getrowstrz
  15. for /f "skip=%G_skiprows% delims=" %%i in ('findstr /n .* %2') do (  
  16. for /f "tokens=2* delims=:" %%j in ("%%i") do set %3=%%j
  17. ::if "%%i"=="%1:" set %3=空白行
  18. goto :eof
  19. )
  20. :G_getrowstrz
  21. for /f "delims=" %%i in ('findstr /n .* %2') do (
  22. for /f "tokens=2* delims=:" %%j in ("%%i") do set %3=%%j
  23. goto :eof
  24. )
复制代码
这就是要输入最新章节的地址才行
作者: happy886rr    时间: 2016-11-29 22:32

好在meta标签比较靠前,要不还真能把for累死~!
  1. @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


    其实主要的代码就是这几句
  1. cd C:\Users\Administrator\Desktop
  2. wget -O 1.txt %as%
  3. HtoX32c /IP 1.txt>2.txt
  4. 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

  1. 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(/&nbsp;/g,' ').replace(/<[^<]*?>/g,'')"
  2. 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吗?一样的,我的代码之前测试过,没缩进照样提取,它是按双引号来的。最多用个
  1. if not "!str:子串=!"=="!str!"
复制代码
即可判别是否含有子串。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2