【发布时间】:2019-11-20 00:45:09
【问题描述】:
我是网络抓取和 HTML 语言的新手。
我正在尝试在 VBA 中编写代码以从以下网站提取数据: https://companies.govmu.org:4343/MNSOnlineSearch/
我有一个 Excel 表,其中有超过 5000 个公司名称,它们分别在 A 和 B 列中的“文件号”,我需要在 C 列中输入它们的“状态”(“活动”或“已失效”)。这将在通过“文件编号”搜索每个公司,然后将其状态提取到 Excel 表后完成。
问题是我似乎无法获得包含我需要的数据的元素。
我已经编写了一段代码,它将从我的 Excel 工作表中提取“文件编号”,将其粘贴到网页上的“文件编号”搜索框中,然后运行搜索。 (您可以尝试搜索C5113,例如)。
但是,在生成的网页上,我尝试获取包含我需要的数据的元素,但它不起作用。
例如,我尝试了 MsgBox(MsgBox 是我个人的方式来检查我的变量是否包含我需要的数据)标签字段集(fs)的内部 HTML,ID 为“CompanyList”,如下面的代码所示,但是它返回一个错误。
我还尝试了另一个名为 div 的变量,其数据类型为 HTMLDivElement,然后通过 ID“companies”获取元素。
最后,我还尝试遍历 IHTMLElementCollection 类型的变量来查找我需要的元素,但它仍然没有显示我需要的元素(它显示了我不需要的其他元素) .
Option Explicit
Sub ExtractStatusDetails()
Dim ie As InternetExplorer
Dim html As HTMLDocument
Dim resultHtml As HTMLDocument
Dim fs As IHTMLElement
Dim searchBoxes As IHTMLElementCollection
Dim searchButton As Object
Dim homePage As String
homePage = "https://companies.govmu.org:4343/MNSOnlineSearch/"
Set ie = New InternetExplorer
ie.Visible = False
ie.navigate homePage
Do While ie.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Set html = ie.document
Set searchBoxes = html.getElementsByClassName("col-md-6 col-lg-4")
searchBoxes(0).innerHTML = Replace(searchBoxes(0).innerHTML, "placeholder", "value")
searchBoxes(0).innerHTML = Replace(searchBoxes(0).innerHTML, "Search company by File No...", "C63")
Set searchButton = searchBoxes(0).getElementsByClassName("btn btn-large btn-primary btn-raised")
searchButton(0).Click
Do While ie.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
Set resultHtml = ie.document
Set fs = resultHtml.getElementById("CompanyList")
MsgBox fs.innerHTML
ie.Quit
End Sub
【问题讨论】:
标签: html vba web-scraping