Я не могу извлечь данные с сайта, который делает запрос с помощью скрипта Java - PullRequest
1 голос
/ 02 июня 2019

Я хочу получить данные с интернет-сайта, но получаю ошибку.

Я изменил предыдущие коды.

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

ошибка времени выполнения '91'

Примечание: дорогие @QHarr приветствия

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Обратите внимание на несколько моментов.

  1. Да, это id не для этого элемента, но этот элемент является div и копирование вставляется через буфер обмена, внешний html будет вставлять только html div -не все таблицы внутри.
  2. Вам нужен список таблиц, поэтому вам нужно изменить селектор, чтобы получить таблицы внутри этого div
  3. Поскольку используется буфер обмена и есть объединенные выходные ячейки, которые вам нужнынайти последнюю использованную строку независимо от столбца и добавить 1, чтобы записать следующую таблицу в несколько строк.
  4. Если вы не уверены в своем селекторе, используйте панель поиска в браузере, как показано [здесь]. 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
1 голос
/ 02 июня 2019

Ваша строка селектора настроена так, что она ищет первый элемент, класс которого matches-data. Тем не менее, matches-data это идентификатор. В результате hTable присваивается Nothing, следовательно, ошибка. Вместо этого попробуйте следующее ...

Set hTable = html.querySelector("#matches-data")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...