【发布时间】:2018-10-20 16:57:02
【问题描述】:
Sub Yarislar()
Dim Asays(), ws As Worksheet, Asay As Long, html As HTMLDocument
Dim http As clsHTTP, url As String, headers(), numberOfRequests As Long
headers = Array("Asay", "Tarih", "Sehir", "Cins", "Grup", "Msf/Pist", "Derece", "Sira", "Jokey", "Kilo", "GC", "Hnd", "Gny", "Taki")
Set http = New clsHTTP
Set ws = ThisWorkbook.Worksheets("X")
Set html = New HTMLDocument
Asays = Application.Transpose(Sheets("Y").Range("A2:A" & Sheets("Y").Columns("A:A").Find(What:="boş").Row - 1).Value)
Const numTableRows As Long = 11
Const numTableColumns As Long = 15
Const BASE_URL As String = "https://yenibeygir.com/at/"
numberOfRequests = UBound(Asays)
Dim results(), headerRow As Boolean, tRows As Object, tRow As Object, iRow As Long
Dim tCells As Object, tCell As Object, r As Long, c As Long, hTable As HTMLTable
ReDim results(1 To numTableRows * numberOfRequests, 1 To numTableColumns)
Application.ScreenUpdating = False
For Asay = 1 To numberOfRequests
headerRow = True
url = BASE_URL & Asays(Asay)
html.body.innerHTML = http.GetString(url)
Set hTable = html.querySelector(".at_Yarislar")
Set tRows = hTable.getElementsByTagName("tr")
For Each tRow In tRows
If Not headerRow Then
c = 2: r = r + 1
results(r, 1) = Asays(Asay)
Set tCells = tRow.getElementsByTagName("td")
For Each tCell In tCells
results(r, c) = tCell.innerText
c = c + 1
Next
End If
headerRow = False
Next
Next
With ws
.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End With
Application.ScreenUpdating = True
end sub
为什么我修改@Qharr 的代码无法从同一网页检索其他数据? @QHarr 为“Galoplar”数据编写的代码完美运行,但是当我修改相同的代码时,它不适用于“Yarislar”。我是不是选桌有误?
【问题讨论】:
-
Doesn't work 是最喜欢的错误描述;(网站上与工作示例有什么区别?BaseURL 很短,与 Galoptar 相同。如果我在浏览器中使用连接的 url ( yenibeygir.com/at/Asay) 我被重定向到 yenibeygir.com/at。似乎 url 中缺少某些内容。
-
测定下一个周期的计数。例如,12543、14362、11563 等。它将使用代码 Sheets("Y").Range("A2:A" & Sheets("Y").Columns("A:A").Find(What:="boş").Row 读取这些值- 1. 在“Y”表中。
-
对不起,我读了 Array 进行分析。提供示例网址并使用
Debug.Print url检查您创建的网址,将其放在url = BASE_URL & Asays(Asay)之后 -
^^ 根据@ComputerVersteher 提供的 cmets。一些示例 ID/完整 URL 在哪里?原始 URL 库的部分内容丢失了,类定义也丢失了。当您在浏览器中手动键入这些完整 URL 之一时,它会检索数据吗?如果找不到“boş”会怎样?
-
“results(r, 1) = Asays(Asay)”行中的错误。错误 9
标签: html excel vba web-scraping