[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【练习-071】批处理或VBS获取论坛首页指定数据

本帖最后由 batman 于 2013-1-14 12:31 编辑

出题目的:
    1、体现批处理和VBS脚本的实用性
    2、加深对正则的理解
解题要求:
    1、因纯批处理不能实现读取网页的功能,因此可使用三方工具,但不能在批中调用VBS(使用MSHTA解释器除外)
    2、VBS中不可调用BAT
加分原则:
    满分30分,思路为重,视情况加分
题目如下:
    用VBS或BAT读取论坛首页www.bathome.net源代码中最新主题、最新回复、热门主题的所有帖子信息,并以下面的形式输出到TXT文本
[最新主题]

主题:计算e的值 发帖ID:chineseman2 URL:http://www.bathome.net/thread-21713-1-1.html
..................................................................
[最新回复]

主题:计算e的值 最新回复ID:chineseman2 URL:http://www.bathome.net/thread-21713-1-1.html
..................................................................
[热门主题]

主题:批处理如何删除指定目录下的文件夹? 最新回复ID:terse URL:http://www.bathome.net/thread-21572-1-1.html
..................................................................
***共同提高***

本帖最后由 batman 于 2013-1-14 00:51 编辑

回复 2# 冷玉公子


    请仔细阅读上面的说明,我没说用纯批吧,而且纯批也是有正则的,虽然findstr那么弱。。。
***共同提高***

TOP

回复 5# apang


    兄弟是故意每个版块只取第一个帖子信息的吗?不过分析了你的代码应该是你split方法的局限所导致的。。。
***共同提高***

TOP

希望大家多用用正则来解决这类提取数据的问题
***共同提高***

TOP

回复 8# apang


    分已加上,正则用得很好,只是能不用IE就Perfect了,IE你懂的。。。
***共同提高***

TOP

本帖最后由 batman 于 2013-1-14 23:56 编辑

回复 9# 冷玉公子


    我一没curl二没wget(个人不喜欢用三方),所以没测试你们的代码,我是看你们的代码加的分。。。
   
   批中findstr支持正则啊
***共同提高***

TOP

本人的解:
  1. Dim objXML, Url
  2. Url = "http://www.bathome.net"
  3. Set objXML = CreateObject("MSXML2.XmlHttp")
  4. objXML.open "GET", Url, False
  5. objXML.send()
  6. Do Until objXML.readyState = 4 : WScript.Sleep 200 : Loop
  7. Dim objADODB
  8. Set objADODB = CreateObject("Adodb.Stream")
  9. objADODB.Type = 1
  10. objADODB.Mode = 3
  11. objADODB.Open()
  12. objADODB.Write objXML.responseBody
  13. Set objXML = Nothing
  14. Dim objFSO, Temp
  15. Set objFSO = CreateObject("Scripting.FileSystemObject")
  16. Temp = objFSO.GetSpecialFolder(2) & "\"
  17. objADODB.SaveToFile Temp & "bathome.html", 2
  18. Set objADODB = Nothing
  19. Dim objHTML, objIH
  20. Set objHTML = GetObject(Temp & "bathome.html", "HtmlFile")
  21. Do Until objHTML.ReadyState = "complete" : WScript.Sleep 200 : Loop
  22. Dim A, B, objStr
  23. A = Array("最新主题", "最新回复", "热门主题")
  24. B = Array("发帖ID:", "最新回复ID:", "最新回复ID:")
  25. For i = 1 To 3
  26.   objIH = objHTML.GetElementByID("homegrids_c_" & i).InnerHtml
  27.   objStr = objStr & "["& A(i - 1) & "]" & vbCrLf & GetInfo(objIH, B(i - 1)) & vbCrLf
  28. Next
  29. Set objHTML = Nothing
  30. objFSO.DeleteFile Temp & "bathome.html"
  31. objStr = Replace(objStr, "<UL class=textinfolist>" & vbCrLf, "")
  32. objFSO.OpenTextFile("HomePage.txt", 2, True).Write Replace(objStr, vbLf, vbCrLf)
  33. Set objFSO = Nothing
  34. CreateObject("Wscript.Shell").Run "cmd /chomepage.txt", True, False
  35. Function GetInfo(Str1, Str2)
  36.   Dim objRE, Matches, Matche
  37.   Set objRE = New RegExp
  38.   objRE.Global = True
  39.   objRE.IgnoreCase = True
  40.   objRE.Pattern = ".*?"">(.*?)</a.*?(\d{1,}-\d{1,}-\d{1,}).*?"">(.*?)</a.*"
  41.   GetInfo = objRE.Replace(Str1, "主题:$3 " & Str2 & "$1 URL:" & Url & "/thread-$2.html")
  42.   Set objRE = Nothing
  43. End Function
复制代码
***共同提高***

TOP

本帖最后由 batman 于 2013-1-15 01:19 编辑

回复 14# bluewing009


    一答:
       我摆明了就是不让你用批处理echo神功大*法(这也屏蔽),怎么着?咬我?
***共同提高***

TOP

返回列表