有两种方法可以从HTML获取信息。两者都表现出在这里:
Option Explicit
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
Const csURL = "http://gent/16584664.html" ' 'real' const
Dim csFSpec : csFSpec = goFS.GetAbsolutePathName(".\16584664.html") ' 'pseudo' const
' use comment or order to select a strategy
WScript.Quit useDom()
WScript.Quit useRegExp()
Function useRegExp()
Dim sAll : sAll = goFS.OpenTextFile(csFSpec).ReadAll()
Dim reCut : Set reCut = New RegExp
reCut.Global = True
reCut.Pattern = "RegistrationDTO.register</td>\s+<td>(\d+)</td>"
Dim oMTS : Set oMTS = reCut.Execute(sAll)
If 1 = oMTS.Count Then
WScript.Echo "success:", oMTS(0).SubMatches(0)
Else
WScript.Echo "failure"
End If
useRegExp = 0
End Function ' useRegExp
Function useDom()
Dim oDOM : Set oDOM = CreateObject("HTMLFILE")
' Dim sHTML : sHTML = getURL(csURL)
Dim sHTML : sHTML = goFS.OpenTextFile(csFSpec).ReadAll() ' for testing
oDOM.write sHTML
' descending the tree HTML BODY TABLE TBODY 5th row 2nd col
Dim oItem : Set oItem = oDOM.childNodes(0).childNodes(1).childNodes(0).childNodes(0).childNodes(4).childNodes(1)
' WScript.Echo "success:", oItem.tagName ' drill down help
WScript.Echo "success:", oItem.innerHTML
' WScript.Echo "success:", oItem.parentNode.childNodes(2).innerHTML ' verification
useDom = 0
End Function ' useDom
Function getURL(sURL)
Dim oHTTP : Set oHTTP = CreateObject("Msxml2.XMLHTTP")
oHTTP.Open "GET", csURL, False
oHTTP.Send
If 200 = oHTTP.Status Then
getURL = oHTTP.responseText
Else
' handle error
End If
End Function ' getURL
输出:
cscript 16584664.vbs
success: 1068
正则表达式的方法显然前提是你可以定义一个模式来唯一标识所需的部分。 DOM方法不适用于错误的HTML,并且如果必须按位置获取所需的项目(如本例中那样),可能会很笨拙。两者都对HTML的变化很敏感。
P.S.
csFSpec是(完整路径)包含给定示例HTML文件的必要标记以使其合法。为了测试,您可以从浏览器中保存页面。
如果将csURL设置为正确的URL并在useDom()函数中激活getURL()行,则不需要该文件。
P.P.S.
为了应付略有不同的HTML埃米尔给他(可能很快就被删除)等问题,我不得不在正则表达式模式从改变:
reCut.Pattern = "RegistrationDTO.register</td>\s+<td>(\d+)</td>"
到:
reCut.Pattern = "RegistrationDTO.register</td>\s*<td>(\d+)</td>"
处理空白
和钻(更普遍,因此更应该从一开始就做到了)下来来源:
' descending the tree HTML BODY TABLE TBODY 5th row 2nd col
Dim oItem : Set oItem = oDOM.childNodes(0).childNodes(1).childNodes(0).childNodes(0).childNodes(4).childNodes(1)
到:
' descending the tree HTML BODY P TABLE TBODY 6th row 2nd col
Dim oItem : Set oItem = oDOM.childNodes(0).childNodes(1).childNodes(0).childNodes(0).childNodes(0).childNodes(5).childNodes(2)
采取额外的P和变更后的行数考虑。
这说明了上面提到的两种策略的脆弱性。 @ Ansgar循环(希望)稳定的收集和比较的方式可能对此有所帮助。
哪种语言? –
我需要使用一个VBScript来实现这个 –