如何解决用 xmlhttp 抓取
我想从 https://www.goaloong.net/football/6in1 获取数据 此页面包含一个表格。
我尝试过:
Sub REQUESTXML()
Dim XMLHttpRequest As xmlHttp
Dim HTMLDoc As New HTMLDocument
Dim elem As Object
Dim x As Long
Set XMLHttpRequest = New MSXML2.xmlHttp
XMLHttpRequest.Open "GET","https://www.goaloong.net/football/6in1",False
XMLHttpRequest.send
While XMLHttpRequest.readyState = 200
DoEvents
Wend
Debug.Print XMLHttpRequest.responseText
HTMLDoc.Body.innerHTML = XMLHttpRequest.responseText
x = 1
For Each elem In HTMLDoc.getElementsByClassName("Leaguestitle")
Sheets("req").Range("A" & x).Value = HTMLDoc.getElementsByTagName("a")(0).innerText
x = x + 1
Next elem
End Sub
我没有结果。
请帮助我?
解决方法
页面 https://www.goaloong.net/football/6in1 是动态的,即首先加载 java 脚本,然后脚本加载内容。一种方法是在 IE 中加载整个页面内容并将其取出。下面的示例(已测试):
Sub REQUESTXML()
Dim IE As New InternetExplorer
Dim elem As Object
Dim x As Long
IE.navigate "https://www.goaloong.net/football/6in1"
Do While IE.readyState = READYSTATE_COMPLETE: DoEvents: Loop
Do Until IE.readyState = READYSTATE_COMPLETE: DoEvents: Loop
'for debug purpose
Open ThisWorkbook.Path & "\TESTFILE.html" For Output As #1
Print #1,IE.document.body.innerHTML
Close #1
x = 1
For Each elem In IE.document.getElementsByClassName("Leaguestitle")
Sheets(1).Range("A" & x).Value = elem.innerText
x = x + 1
Next elem
IE.Quit
End Sub
,
如果您可以使用 DLL 并重写代码,则可以使用 VBA 运行 Microsoft 的 Edge 浏览器(基于 Chrome 的浏览器)。有了它,你几乎可以做任何你想做的事情。但是请注意,对 DOM 的访问是由 javascript 执行的,而不是由像 将 IE 变暗为新的 InternetExplorer。查看 VBA 示例,您就会掌握。
https://github.com/peakpeak-github/libEdge
旁注:还包括 C# 和 C++ 示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。