html - 使用 css 选择器 excel vba 从网站抓取数据
问题描述
我正在尝试使用 CSS 选择器从网站上抓取特定数据。我在 QHar 的帮助下取得了成功,但现在的要求已经改变。这是我下面的代码:
代码
Public Sub CompanyData2()
Dim html As HTMLDocument, ws As Worksheet, re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\s{2,}"
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.bizi.si/iskanje?q=", False
.send
html.body.innerHTML = .responseText
End With
ws.Range("A4").Value = re.Replace(Join$(Array(html.querySelector("td.item a").innerText), ", "), Chr$(32))
ws.Range("A5").Value = re.Replace(Join$(Array(html.querySelector("td.item + td.item").innerText), ", "), Chr$(32))
ws.Range("B6").Value = re.Replace(Join$(Array(html.querySelector("td.item + td.item + td.item + td.item").innerText), ", "), Chr$(32))
End Sub
结果如下:
网站
我想在表格 1 A3 上提取公司名称,如下所示:
谢谢你。
解决方案
您需要REPROMAT
在 A1 中,然后在发出初始查询后,您必须访问实际的公司页面以获取显示的公司名称。如果您直接使用公司网址,那么您可以跳过第一个请求并从第二个请求开始使用代码。
Public Sub CompanyData()
Dim html As HTMLDocument, ws As Worksheet, nodes As Object
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set html = New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.bizi.si/iskanje?q=" & Application.EncodeURL(ws.Range("A1").Value), False
.send
html.body.innerHTML = .responseText
Set nodes = html.querySelectorAll("td.item")
With ws
.Range("A4").Value = nodes.Item(0).FirstChild.innerText
.Range("A5").Value = nodes.Item(1).innerText
.Range("A6").Value = "DŠ: " & nodes.Item(3).innerText
End With
.Open "GET", html.querySelector("[id$=linkCompany]").href, False
.send
html.body.innerHTML = .responseText
ws.Range("A3") = html.querySelector("#ctl00_ctl00_cphMain_cphMainCol_CompanySPLPreview1_labTitlePRS").innerText
End With
End Sub
推荐阅读
- apache-spark - 通过更改表列名称的类型来更改表列名称时,无法使用 spark 读取数据
- javascript - 将数组推送到 Postman 中的环境变量
- jquery - If Jquery Kendo popup window closed, Jquery code after "close statement" is not executing
- java - Java,Scanner 只读取前两行,忽略其余行
- python-3.x - 使用 RPI、Pyfirmata 和 Arduino 制作电压表
- parsing - 理解这个在 Haskell 中实现的递归下降解析器
- vue.js - 尽管赋值成功,vue 变量未定义
- sql - 通过多个连接获得正确的总和
- html - 无法让引导程序响应工作
- bash - bash to pass array to ssh to another server