html - 从使用 Java 脚本进行查询的站点中提取数据

标签 html excel vba web-scraping

我想从 Internet 站点获取数据。
我明白了

run-time error '91'


我修改了之前的代码。
Sub DENEME()
    Dim S As String
    Dim html As HTMLDocument
    Dim hTable As HTMLTable
    Dim clipboard As Object
    Set html = New HTMLDocument
    With New XMLHTTP60
        .Open "GET", "https://www.scorespro.com/basketball/results/date/2019-02-15", False
        .setRequestHeader "content-type", "application/x-www-form-urlencoded; charset=UTF-8"
        .send
        S = .responseText
    End With
    html.body.innerHTML = S
    Set hTable = html.querySelector(".matches-data")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    clipboard.SetText hTable.outerHTML
    clipboard.PutInClipboard
    Range("A1").PasteSpecial
End Sub

最佳答案

有几点需要注意。

  • 是的,它不是该元素的 id 类,但该元素是一个 div,并且通过剪贴板复制粘贴外部 html 只会粘贴 div 的 html - 不是其中的所有表格。
  • 你想要的是一个表格列表,所以你需要更改选择器以获取该 div 中的表格
  • 由于使用剪贴板并且有合并的输出单元格,您需要找到与列无关的最后使用的行并加 1 以将下一个表写入几行。
  • 如果不确定您的选择器,请使用浏览器中的搜索栏,如 [此处] 所示。 1

  • VBA:
    Option Explicit
    Public Sub Deneme()
        Dim s As String, ws As Worksheet, tables As Object, i As Long
        Dim html As HTMLDocument, clipboard As Object
        Set html = New HTMLDocument
        Set ws = ThisWorkbook.Worksheets("Sheet1")
        Application.ScreenUpdating = False
        With New XMLHTTP60
            .Open "GET", "https://www.scorespro.com/basketball/results/date/2019-02-15", False
            .setRequestHeader "content-type", "application/x-www-form-urlencoded; charset=UTF-8"
            .send
            s = .responseText
        End With
    
        html.body.innerHTML = s
        Set tables = html.querySelectorAll("#matches-data table")
        Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    
        For i = 0 To tables.Length - 1
            clipboard.SetText tables.item(i).outerHTML
            clipboard.PutInClipboard
            ws.Range("A" & GetLastRow(ws) + 1).PasteSpecial
        Next
        Application.ScreenUpdating = True
    End Sub
    
    Public Function GetLastRow(ByVal sh As Worksheet) As Long
        On Error Resume Next
        GetLastRow = sh.Cells.Find(What:="*", _
                                After:=sh.Range("A1"), _
                                Lookat:=xlPart, _
                                LookIn:=xlFormulas, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlPrevious, _
                                MatchCase:=False).Row
        On Error GoTo 0
    End Function
    

    关于html - 从使用 Java 脚本进行查询的站点中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56413715/

    相关文章:

    excel - Excel VBA中引用相邻单元格的最有效方法是什么?

    excel - 如何遍历动态创建的用户表单上的复选框?

    html - 使用 CSS 悬停在重叠元素上时元素的样式悬停状态

    html - 响应式嵌入 YouTube 自定义尺寸 Bootstrap 3.3.6

    excel - 在 ADO.NET 4.0 中处理多个 Excel 文件的多个连接的正确方法是什么?

    excel - 如何在Excel中轻松计算时间

    c# - 如何以编程方式强制中断 VBE 编辑器

    html - favicon 不会显示在 chrome 中,但会显示在其他浏览器中,如 IE、Firefox

    javascript - 使用 document.write() 将结果写入单独的页面

    Excel 使用公式返回表名称?