【问题标题】:How to extract data from multiple webpages into Excel with a macro如何使用宏将多个网页中的数据提取到 Excel 中
【发布时间】:2015-12-21 07:08:56
【问题描述】:

我正在尝试从一个特定网站将数据提取到 Excel (2007) 中,但分布在多个网页上。我想在我的工作表中看到哪些项目在这个网站上提供,而不需要浏览很多页面或使用搜索(我的浏览器有点错误)。

我曾尝试通过 Excel 导入数据,但这只适用于一页。因为数据覆盖了 183 页,我必须做 183 次才能完成。

我的猜测是使用宏会更快,但我没有这方面的经验。 我在这个论坛上进行了搜索,但我找到的所有宏要么给出错误,要么只为一页工作。

相关网站的链接是http://www.scalemodelstore.nl/modellen/2/Vliegtuigen.html?&pageID=0

链接中唯一的变化是在末尾:pageID=1、2,依此类推。

提前致谢!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试这个:

    Sub GetData()
    
        Dim lRow, lPage, oXmlHttp, sResp, aResp, sPart, oHtmlFile, oBody, sInText, aInLines, lCol, sLineText, aImgPts
    
        lRow = 1
        lPage = 0
        Do
            sUrl = "http://www.scalemodelstore.nl/modellen/2/Vliegtuigen.html?&pageID=" & lPage
            Do
                Set oXmlHttp = CreateObject("MSXML2.XMLHttp")
                oXmlHttp.Open "GET", sUrl, True
                oXmlHttp.Send
                Do Until oXmlHttp.ReadyState = 4
                    DoEvents
                Loop
                sResp = oXmlHttp.ResponseText
            Loop While sResp = ""
            aResp = Split(sResp, "<a class=""productTile"" ")
            For i = 1 To UBound(aResp)
                sPart = "<a " & aResp(i)
                sPart = Split(sPart, "</a>")(0)
                Set oHtmlFile = CreateObject("htmlfile")
                oHtmlFile.Write sPart
                Set oBody = oHtmlFile.GetElementsByTagName("body")(0)
                sInText = Trim(oBody.InnerText)
                aInLines = Split(sInText, vbCrLf)
                lCol = 1
                For Each sLineText In aInLines
                    sLineText = Trim(sLineText)
                    If sLineText <> "" Then
                        Cells(lRow, lCol).Value = sLineText
                        lCol = lCol + 1
                    End If
                Next
                aImgPts = Split(sPart, "<img src=""")
                If UBound(aImgPts) > 0 Then
                    Cells(lRow, lCol).Value = Split(aImgPts(1), """")(0)
                End If
                lRow = lRow + 1
            Next
            lPage = lPage + 1
        Loop Until UBound(aResp) = 0
    
    End Sub
    

    此代码仅获取所有网页上每个模型的所有可用数据并将其放入工作表中,每个模型一行。请注意,这不是一站式解决方案,代码现在可以工作,但网站内容更改后可能会出现故障。

    【讨论】:

    • 似乎工作得很好,谢谢!网站更改时是否需要更改任何特定部分,或者我需要一个全新的宏?
    • 首先在这种情况下尝试为`Split()`函数找到合适的第二个参数字符串值,所有的解析逻辑都基于它。目前,如果您打开上述网页 html 代码,您可以从网页内容中的上述代码中找到字符串,例如。 G。每个带有模型描述的块都从&lt;div class=""product" 开始,依此类推。
    猜你喜欢
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多