如何在网站上设置下拉框,以便选择选项并抓取数据

埃格雷

网站已更改,因此我无法再从中抓取数据。我相信只需要更改下面的设置行,但是已经尝试了很多事情,但都没有奏效。恐怕我对这个领域不是很了解,但其余的代码正在运行。例如 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 解析器。为此,您将需要以下内容:

  1. JSON 解析器,它可以帮助您解析下载的数据。按照安装说明将其导入到您的项目中
  2. Microsoft Scripting Runtime图书馆的引用JSON 解析器需要它。
  3. 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在网站上显示下拉列表的所有选项?

如何在网站上抓取嵌入式整数

如何在Safari和Chrome的选择框(下拉框)中设置高度或填充?

Vue.js:如何在“选择”下拉框中获取选项的属性?

如何在AngularJS的下拉框中设置选择默认值?

如何在网站上创建多选列表框?

如何从网站上抓取数据?

如何在Java FX中设置下拉框的宽度

如何在 Angularjs 的下拉框列表中设置值?

如何在网站上显示AJAX响应数据

使用 BeautifulSoup 选择下拉框值时无法抓取数据

当从下拉框中选择一个选项时,如何使Excel自动填充表中的数据?

如何取消选择Altair的下拉框

C#,如何在网站上使用Regex进行抓取

GoLang刮板机。如何在网站上抓取动态生成的链接?

设置选择框的选择选项

如何在同一模式中从选择下拉菜单中选择选项时为模式设置边距

使用Scrapy登录网站,导航到javascript表单,选择选项,然后抓取显示的数据

如何在网站上显示ppt

如何在网站上支持匿名?

如何在网站上实现字体

如何使用节点从网站上抓取数据

从vba的下拉框中选择各种选项

从单个下拉框中选择多个选项和值

Angular 7-设置选择/下拉框的数据源

如何在HTML中设置特定选择选项的样式

如何在 Symfony 4.1 中设置选择选项名称?

如何在选择选项上设置重复 angularjs

如何在不同的选择选项上设置不同的动作?