自动从Excel的多个网页收集数据

时间:2018-07-27 08:20:08

标签: excel vba excel-vba automation

我一直在尝试自动化任务,但是最近遇到了问题。部分任务是将网站上的2条信息复制并粘贴到excel文档中。

以下是网页外观的一些示例:

https://nvd.nist.gov/vuln/detail/CVE-2018-0253

https://nvd.nist.gov/vuln/detail/CVE-2018-0300

https://nvd.nist.gov/vuln/detail/CVE-2018-0256

我要收集的数据是“当前描述”和“ CVSS v3.0基本分数”的值

我总是必须从多个链接中获取数据,但是它们非常相似,唯一的区别在于它是CVE-****-****。

目前,我拥有该文件,以便excel将到网页的实际链接放入列表中。

有没有一种方法可以创建一个宏,该宏会自动浏览链接列表,并从网站中获取“当前描述”和“ CVSS v3.0基本得分”数据,并将其放入excel单元格中。

谢谢您的帮助/建议/提示。

1 个答案:

答案 0 :(得分:0)

这就是我的处理方式。显然,您可以调整如何处理丢失的信息。我只是使用提供的CVE提供一个示例。您真的应该尽力而为,因为我不知道您使用的是哪种方法。

Option Explicit
Public Sub GetInfo()
    Const BASE_URL As String = "https://nvd.nist.gov/vuln/detail/"
    Dim i As Long, CVES(), tempArr()
    CVES = Array("CVE-2018-0253", "CVE-2018-0300", "CVE-2018-0256")
    For i = LBound(CVES) To UBound(CVES)
        tempArr = GetDescriptionAndScore(BASE_URL & CVES(i))
        Debug.Print "Desc: " & tempArr(0)
        Debug.Print "Score: " & tempArr(1)
        Erase tempArr
    Next i
End Sub

Public Function GetDescriptionAndScore(ByVal url As String) As Variant
    Dim html As New HTMLDocument, arr(1), sResponse As String
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False
        .send
        sResponse = StrConv(.responseBody, vbUnicode)
    End With

    sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
    With html
        .body.innerHTML = sResponse
        arr(0) = .querySelector("[data-testid=vuln-description]").innerText
        If InStr(1, sResponse, "This vulnerability is currently awaiting analysis") > 0 Then
            arr(1) = "Not available"
        Else
            arr(1) = .querySelector("[data-testid=vuln-cvssv3-base-score]").innerText
        End If
    End With
    GetDescriptionAndScore = arr
End Function

参考(通过VBE>工具>参考):

HTML对象库