[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 inittab 于 2010-3-6 18:16 发表
最新的win32版 sed 4.2下载。
http://ncu.dl.sourceforge.net/project/gnuwin32/sed/4.2-1/sed-4.2-1-setup.exe
安装完成后,将
C:\Program Files\GnuWin32\bin
下的所有文件复制到c:\windows\system32 下。批处 ...

1.src.txt带有黑块,见附件
2.希望能处理全文页面:http://lnlib.vip.qikan.com/mag.aspx?issn=1005-0043&year=2009&Issue=5, 源码处理http://www.qikan.com.cn/MagDetails/1005-0043/2009/5.html这类页面没有全文
3.在全文页面中有的文章很长,还有第二页(甚至更多),能否合并为src.txt,比如:http://lnlib.vip.qikan.com/article.aspx?titleid=dnah20090501的第二页是http://lnlib.vip.qikan.com/article.aspx?titleid=dnah20090501-1,能否按规律合并一个src.txt
4.我自己摸索修改了源代码,尝试处理全文页面,发现建立的文件夹全都在一层上还自动加了序号:“000_期刊目录:《电脑爱好者》2009年第23期”,“001_ 1.[新视界]”,“002_ 2. 国标UFO能否推行开来”。如何修改?

TOP

  请楼主把所有的要求更新到顶楼,方便后来人的讨论。若需要体现变更过程,可以保留以前的要求,在顶楼尾部追加最新要求。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

16楼的杂志内容比较完整。由于htox32c生成的格式稍难处理。本次改用vbs脚本混合bat处理html2txt.
代码已经支持自动判断采集分页并合并内容。
如有问题请反馈。代码有点复杂。高手请帮忙优化
  1. @echo off&setlocal enabledelayedexpansion
  2. title "期刊采集器(write by inittab 2010.3)"
  3. rem 多次运行后,如出现“访问过于频繁,请稍后再试”请自行脚本中则修改适当的延时
  4. if exist tmp1.txt del /Q tmp?.txt
  5. echo;set oDOM = WScript.GetObject(WScript.Arguments(0))>htm2txt.vbs
  6. echo;do until oDOM.readyState = ^"complete^">>htm2txt.vbs
  7. echo;WScript.sleep 200>>htm2txt.vbs
  8. echo;loop>>htm2txt.vbs
  9. echo;WScript.Echo oDOM.Body.InnerText>>htm2txt.vbs
  10. :start
  11. set/p qs=请输入电脑爱好者期数:(1-24,按q退出):
  12. if "%qs%"=="q" goto :eof
  13. if %qs% gtr 24 echo\输入有误!!,按任意键重新输入!&pause>nul&goto start
  14. if %qs% leq 0  echo\输入有误!!,按任意键重新输入!&pause>nul&goto start
  15. if not exist 第!qs!期 md 第!qs!期
  16. echo;正在下载,请稍等...
  17. :::以下一行网址修改可采集http://lnlib.vip.qikan.com(要保留%qs%变量)其他杂志内容。
  18. curl -s "http://lnlib.vip.qikan.com/Mag.aspx?issn=1005-0043&Year=2009&Issue=%qs%" | sed -n "/期刊目录/,/客服热线/p">tmp1.txt
  19. :::以下一行为延时,改数字调整延时时间。
  20. ping localhost -n 2 >nul
  21. sed "s/article.aspx?/>/g;s/\" title=\"/@</g;1,2d;/客服/d" tmp1.txt>tmp2.txt
  22. htox32c /ip tmp2.txt>tmp3.txt 2>nul
  23. echo;建立目录结构并下载处理内容
  24. set/a m=0
  25. for /f "tokens=2,* delims=.@[] " %%a in (tmp3.txt) do (
  26. if "%%b"=="" (set var=00!m!&set dir1=!var:~-3!_%%a&set/a m+=1,n=0&md "第!qs!期\!dir1!" 2>nul) else (
  27. set var=00!n!&set dir2=!var:~-3!_%%b&set/an+=1&md "第!qs!期\!dir1!\!dir2!" 2>nul
  28. set "url=http://lnlib.vip.qikan.com/article.aspx?%%a"
  29. cscript //NoLogo //e:vbscript htm2txt.vbs "!url!" | sed -n "/^首页/,/存入我的阅览室/p" | sed "s/首页 ->//g;s/字体.*//g">tmp1.txt
  30. ping localhost -n 1 >nul
  31. findstr /C:"[2]" tmp1.txt | sed "s/[^2-9 ]//g">tmp2.txt
  32. set str=&set/p str=<tmp2.txt
  33. for %%i in (!str!) do (
  34. set/a subnum=%%i-1&cscript //NoLogo //e:vbscript htm2txt.vbs "!url!-!subnum!" | sed -n "/^首页/,/存入我的阅览室/p" | sed "/首页 ->/d">>tmp1.txt
  35. ping localhost -n 1 >nul
  36. )
  37. sed "/存入我的阅览室/d" tmp1.txt>"第!qs!期\!dir1!\!dir2!\src.txt"
  38. :::::以下两行为调试用,可删除
  39. echo;&echo;======================第!qs!期\!dir1!\!dir2!===========================================
  40. type "第!qs!期\!dir1!\!dir2!\src.txt"
  41. )
  42. )
  43. :::::清理临时文件
  44. del /Q tmp?.txt&echo;本期内容采集完毕!!!
复制代码

[ 本帖最后由 inittab 于 2010-3-9 11:13 编辑 ]

TOP

源码测试了一下,为何生成的src.txt用记事本打开带黑块?经常会出现找不到指定路径的提示,怀疑是没有找到分页的文章,还有可能是建立文件夹时因为含有违禁字符,没有建成。另外文件夹前加序号总共三位(000到999,不应该出现”0010“。批处理中间停滞不前,怀疑是下载速度过快,被封,最好能限速并设置代理,htm2txt.vbs能否实现?

TOP

我测试时很正常没有黑块问题(win7 联想OEM旗舰正版)。可能是你的记事本编码不对或sed版本有问题。请用ansi编码记事本试试。推荐最好用editplus文本编辑器,html转txt用的是借用了vbs代码(相对htox32c转换更干净一些,但vbs速度比htox32c要慢不少)
“经常会出现找不到指定路径的提示”。原因已找到,是type 后边路径空有空格引起,这种情况需要将路径用“”括起来就ok了,对采集内容没影响。
0010的问题,是一时大意。已修正。  
增加下载延时(会减慢采集速度,看情况调整数字大小),以防快速访问下载被封。增加过滤“存入我的阅览室”
另外发现sed -i 会生成大量的临时文件,不好用,还是重定向好些。
节省资源,在上上上楼修改。

[ 本帖最后由 inittab 于 2010-3-9 11:24 编辑 ]

TOP

回复 20楼 的帖子

是的,sed -i表面上是直接修改原文件,实际上后台也是通过临时文件来实现的,只是这个过程没有让用户看到而已。
Do All in Command Line

TOP

更换sed版本,src.txt无黑块,ping localhost 那句中2改为20测试一次,处理到这页停顿:http://lnlib.vip.qikan.com/article.aspx?titleid=dnah200901102,怀疑是该页的图片代码或者是延时不够造成程序停滞,屏幕见下图。改成50再试试。另外因为需要延时下载,不知道何时能下完,才能再下另一期(无法双开),源代码只能选择09年的一期(有些期不存在,程序就在做无用功),能否增加一个选择,自动解析页面,下载页面所包含的各年各期("http://lnlib.vip.qikan.com.cn/mag.aspx?issn=1005-0043&year=2009&Issue=23"含有issn=1005-0043&Year=200*&Issue=*的url),依顺序保存在“000_200*年第*期”,"001_200*年第*期"文件夹中,其下的目录结构和文件夹命名规则不变,这样的话也便于测试各个页面。源代码文章页面是用htm2txt.vbs下载,是不是没有curl功能丰富(可限速,可延时,可用代理,可续传,这些好像强于htm2txt.vbs),能否用curl下载后再用vbs处理?

第二次测试出现下列提示,文件夹中的src.txt内容为空,原因不明。再试一次再说

TOP

可能是访问过快网页被封了. 自已手动打开此网页,是不是出现"问过于频繁,请稍后再试"的图片?
adsl的话重启一下路由,换个IP地址就可以解除.

TOP

测试下列网页时,建立文件夹出错,
http://lnlib.vip.qikan.com/mag.aspx?issn=1005-0043&year=2009&Issue=23

TOP

返回列表