网站已更改,因此我无法再从中抓取数据。我相信只需要更改下面的设置行,但是已经尝试了很多事情,但都没有奏效。恐怕我对这个领域不是很了解,但其余的代码正在运行。例如 url 是https://www.gurufocus.com/stock/CFWFF/insider,它是我试图按下下拉菜单并将其更改为 100 而不是 10 的内部交易表:
t = Timer
noTable = 0
Do
Set DropDown = doc.querySelectorAll(".el-dropdown-menu__item")
lastDropDrownItemIndex = DropDown.Length - 1
If Timer - t > MAX_WAIT_SEC Then
noTable = 1
Exit Do
End If
Loop While lastDropDrownItemIndex < 1
If noTable = 1 Then GoTo noTableEscape
DropDown.Item(lastDropDrownItemIndex).Click
谢谢
好吧,不确定你到底在追求什么,但是你正在抓取的网站提供了一个 API,在我看来,它可能会让你的生活更轻松。简而言之,这意味着它提供了一种使用嵌入在 URL 中的一些参数来请求数据的简单方法。它以 JSON 格式返回请求的数据。
在以下代码中,我将使用 XMLHTTP 请求方法和 JSON 解析器。为此,您将需要以下内容:
Microsoft Scripting Runtime
图书馆的引用。JSON 解析器需要它。Microsoft WinHTTP Services, Version 5.1
图书馆的引用。它允许您使用 HTTP 请求对象。出于演示目的,以下代码将仅在即时窗口中打印第一个条目的名称和位置。您可以修改代码以满足您的需要。
Sub test()
Dim req As New WinHttpRequest
Dim jsonResponse As String
Dim jsonParsed As Object
Dim url As String
Dim pageNum As Integer
Dim numPerPage As Integer
pageNum = 1 'You can change this parameter to navigate in different pages
numPerPage = 100 'You can change this parameter to control the number of entries
url = "https://www.gurufocus.com/reader/_api/stocks/OTCPK:CFWFF/insider?page=" & pageNum & "&per_page=" & numPerPage & "&sort=date%7Cdesc"
With req
.Open "GET", url, False
.setRequestHeader "Accept", "application/json, text/plain, */*"
.setRequestHeader "Authorization", ThisWorkbook.Worksheets("The name of your Worksheet").Range("A1").Value 'I have stored a string that is essential to the request in cell A1
.send
jsonResponse = .responseText
End With
Set jsonParsed = JsonConverter.ParseJson(jsonResponse)
Debug.Print jsonParsed("data")(1)("name") 'get the name parameter of the first entry
Debug.Print jsonParsed("data")(1)("position") 'get the position parameter of the first entry
End Sub
请注意,有一个非常长的字符串对请求至关重要,我已将其存储在单元格 A1 中。这个字符串看起来像这样:
承载eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImUxYjAwMmYxMjczMGRiMTBmMmZkYjJkNDk0YTU4NjRmZDZjOWY3ZGI4ZmI1NDY1NTQ2MzZlMGJhNzkxODUxNmY4NTM2ZWIzZDNhODhmN2VmIn0.eyJhdWQiOiIyIiwianRpIjoiZTFiMDAyZjEyNzMwZGIxMGYyZmRiMmQ0OTRhNTg2NGZkNmM5ZjdkYjhmYjU0NjU1NDYzNmUwYmE3OTE4NTE2Zjg1MzZlYjNkM2E4OGY3ZWYiLCJpYXQiOjE1NTkwNzA3OTcsIm5iZiI6MTU1OTA3MDc5NywiZXhwIjoxNTY5NDM4NzkzLCJzdWIiOiIiLCJzY29wZXMiOltdfQ。mZ4DqhUk9YAU6JYDBScF8MJ_zHPyL94bAec7LxZTaWipcWf9uesdGDMDC9v_7W-6zrtXAUWhk4YAL70E5rpPjM7gusYH0RfO48O2PnaV8gsqXoNCFwFBOHuxh109q7X0YsNkfX2wX8m3XigtK9A_YAGID7wxgX96lwzBevsDJ3borHMcJlQtxidF_Bq2D5WPASsuy3jdY80HkOCR1y4eaSIswBEtK5rPj_xy7VXRbYGhLklqw4wgHgq4blfaHnVVmPXf6k8mx45ye8vPecS-w9kjuDOHVn2mvU6mpBzqEpbH4lqpiqmYG7M-CvB1joEAcMQtcilCvsdfKOusoC2MU4_vPtF3Q4ZFVaEcXIQgomdKtFa_XGpCudit45b2rEFacKMUENqLj_sPwYkgM1IPl1lQfR-VpigqnCHPAxVQAPzqwJvS6CxuYOPmvnrx23fBAillP7LtDHwHtlMpgZUjdB5y6IWsia76crM4kbkrKn3zc8xoAGb1fIrgJlY-9hOzrwsmrchantEdYOFZjcMJvhCnlfvnEm6kT2Sdcu4o6TndTZJjrVmD4mb-jNGy4kw_mAx1DfyqR7GLtCVSzcSLKgrrwCJEL22K2bfXH2HExXvgLFbPXivVZJc70TnF9lJmx_dx79cxAm7szFGIdrs56bAC4mdKpvKL3BNmVY-J-G0x79cxAm7szFGIdrs56bAC4mdKpvKL3BNmVY-J-G0x79cxAm7szFGIdrs56bAC4mdKpvKL3BNmVY-J-G0
相同的字符串也应该适合您。
结果如下所示:
Brown, James Michael
Senior Officer
100 个数据条目中的每一个都具有以下结构:
遍历所有条目也相当容易。例如,要打印所有条目的名称,您必须这样做:
Dim item As Object
For Each item In jsonParsed("data")
Debug.Print item("name")
Next item
最后,您还可以遍历每个条目的所有参数。例如,以下代码打印第一个条目的所有参数及其对应的值:
Dim key As Variant
For Each key In jsonParsed("data")(1).Keys
Debug.Print key & ": " & jsonParsed("data")(1)(key)
Next key
因此,通过这种方式,您基本上可以访问每个条目所需的任何参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句