首页 > 解决方案 > 使用查询获取请求在 VBA 中解析 Html

问题描述

我正在使用其他人的代码,因为这是其他人正在使用的旧文件,我想对其进行更新以提高效率,但我需要一些帮助。下面是vba操作。我需要的是获取信息,但删除除每次运行操作时都会更改的某个单词之外的所有内容。我可以使用正则表达式和 objRE.Pattern = "|" 但是这个词会根据状态而变化。

HTML:

<span  onmouseover="ShowText('Message','blahblah'); return true;" 
onmouseout="HideText('Message'); return true;" 
href="javascript:ShowText('Message')">---(PSA)---</span>
</font><a href='?srn=numbers12131131'target='_self'><font color='#6666FF' 
size='3'>numbers123232343</font></a><font  size='3'>----Installed----MUM 
Indication:In Scope-<font color='#00CC00'>PASS WITH WARNING</font>--- (20181018) 
</td><tr></table> </b><br>
<table class="OrderForm" width="1000"> '

我只想在我的 excel 表中显示已安装状态。

需要工作的 VBA 代码:

Sub GetComment()

Dim book As Workbook
Dim sheet As Worksheet
Dim row As Integer
Dim SRN As String
Dim whttp As Object


Set book = ThisWorkbook
Set sheet = book.Worksheets("CMT Data")
Set whttp = CreateObject("WinHTTP.WinHTTPrequest.5.1")


row = 2
SRN = sheet.Cells(row, 1)
Do While SRN <> ""
    Debug.Print SRN
    whttp.Open "GET", "www.websitedatgoeshere.com" & SRN, False
    whttp.SetRequestHeader "Cookie", "mycookiefromwebsite;"
    whttp.send
    Debug.Print whttp.responseText
    sheet.Cells(row, 2) = whttp.responseText
    row = row + 1
    SRN = sheet.Cells(row, 1)

Loop

Set whttp = Nothing

End Sub

标签: htmlexcelvbaweb-scraping

解决方案


这是基于当且仅当该词始终位于“----”和“----”之间,并且它是响应中的第一次出现。如果不是第一个,您可以根据需要调整索引 1。

Debug.Print Split(Split(whttp.responseText, "----")(1), "----")(0)
sheet.Cells(row, 2) = Split(Split(whttp.responseText, "----")(1), "----")(0)

推荐阅读