【问题标题】:Scrape data from xmlhttp从 xmlhttp 抓取数据
【发布时间】:2019-01-29 05:00:06
【问题描述】:

我正在尝试从 xmlhttp 中抓取元素。 我对 vba 并不算太差,但对数据抓取来说相对较新。 我之前一直在用ie。

我可以将 html 导入到单元格中,但想具体导入名称、ID、价格和库存水平。

我用来导入数据的代码是

    Private Sub HTML_VBA_Excel()

    Dim oXMLHTTP    As Object
    Dim sPageHTML   As String
    Dim sURL        As String

        'Change the URL before executing the code
        sURL = "https://www.superdrug.com/Make-Up/Lips/Lip-Kits/Flower-Beauty-Mix-N%27-Matte-Lipstick-Duo-Tickled-Pink-687/p/769466"

        'Extract data from website to Excel using VBA
        Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
        oXMLHTTP.Open "GET", sURL, False
        oXMLHTTP.send
        sPageHTML = oXMLHTTP.responseText

        'Get webpage data into Excel
        sh02.Cells(1, 1) = sPageHTML

End Sub

提前感谢您收到的任何帮助。

伊恩

【问题讨论】:

    标签: html vba http web-scraping scrape


    【解决方案1】:

    您无法从针对您显示的 url 发出的 xmlhttp 请求中可靠地提取信息,因为内容是 javascript 加载的并且不会运行。

    不确定令牌的可持续性(似乎与使用的值无关),但您可以加入 productid,这是您的 url 的结尾,页面中存在 ajax 令牌并使用 issue 和 xmlhttp 请求查询字符串参数并解析感兴趣项目的 json 响应。我使用jsonconverter.bas。下载并安装 .bas 后,您需要转到 VBE > Tools > References 并添加对 Microsoft Scripting Runtime 的引用。

    一些测试似乎表明可以在连字符之后添加任何数字来代替标记,这样您就可以动态随机生成一个数字来使用。

    值得注意的是,您可以在查询字符串中用逗号分隔多个产品,从而进行批量请求。然后,您需要对返回的字典集合执行 For Each 循环。

    Option Explicit
    
    Public Sub GetInfo()
        Const URL As String = "https://www.superdrug.com/micrositeProduct/bulk/769466-1548702898380"
        Dim json As Object, title As String, price As String, stocking As String, id As String
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", URL, False
            .Send
            Set json = jsonconverter.ParseJson(.responsetext)(1)
        End With
    
        title = json("name")
        price = json("price")("formattedValue") 'json("price")("value")
        stocking = json("stockLevel")
        id = json("code")
    End Sub
    

    如果您使用浏览器,则 json 字符串存在于脚本标记之一中,例如 .innerHTML,您可以轻松地从那里提取。

    【讨论】:

    • 再次感谢 QHarr。我需要为此使用哪些变量? jsonconverter 作为对象 & writetxtfile 和 responsetext 作为字符串?认为我的“好的”vba 技能在这里非常相关。谢谢。伊恩
    • 所有变量都在里面。您需要从提供的链接下载 jsonconverter.bas。我不是故意要包含 writetxt 行。
    猜你喜欢
    • 2021-05-08
    • 2021-12-20
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2018-06-10
    • 2018-06-06
    • 2021-07-08
    相关资源
    最近更新 更多