从 xmlhttp 抓取数据
Scrape data from xmlhttp
我正在尝试从 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
在此先感谢您提供的任何帮助。
伊恩
您无法从针对您显示的 url 发出的 xmlhttp 请求中可靠地提取信息,因为内容已 javascript 加载并且不会 运行.
不确定令牌的可持续性如何(似乎与使用的价值无关)但您可以使用 ajax 令牌加入 productid,这是您 url 的末尾出现在页面中并使用查询字符串参数发出和 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
存在于一个脚本标记中,您可以轻松地从那里提取。
我正在尝试从 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
在此先感谢您提供的任何帮助。
伊恩
您无法从针对您显示的 url 发出的 xmlhttp 请求中可靠地提取信息,因为内容已 javascript 加载并且不会 运行.
不确定令牌的可持续性如何(似乎与使用的价值无关)但您可以使用 ajax 令牌加入 productid,这是您 url 的末尾出现在页面中并使用查询字符串参数发出和 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
存在于一个脚本标记中,您可以轻松地从那里提取。