- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试从网站复制数据,我需要所有范围的尺寸、价格、设施、特价、预订。我在代码下方构建了框架,但我无法复制下面正在运行的元素。遇到很多错误。有人可以调查一下吗?
Sub gostoreit()
Dim ie As New InternetExplorer, ws As Worksheet
Dim element As IHTMLElement
Set ws = ThisWorkbook.Worksheets("Unit Data")
With ie
.Visible = True
.Navigate2 "" &
"https://www.gostoreit.com/locations/georgia/cumming/go-store-cumming/"
While .Busy Or .readyState < 4: DoEvents: Wend
Dim listings As Object, listing As Object, headers(), results(), r
As Long, c As Long, item As Object
headers = Array("Size", "promo", "Reguler Price", "Online Price", "Listing Active", "features")
Set listings = .document.getElementsByTagName("l-main-container")
ReDim results(1 To listings.Length, 1 To UBound(headers) + 1)
For Each listing In listings
r = r + 1
results(r, 1) = listing.getElementsByClassName("size_txt")(0).innerText 'Size
results(r, 2) = listing.getElementsByClassName("helpDiscounts ls_discountsTitleSmall")(0).innerText 'promo(example. First Month Free)
results(r, 3) = listing.getElementsByClassName("wasPrice")(0).innerText 'reguler price
results(r, 4) = listing.getElementsByClassName("ls_unit_price")(0).innerText 'online price
results(r, 5) = listing.getElementsByClassName("unitSelectButtonRES isRESBut")(0).innerText ' listing active
results(r, 6) = listing.getElementsByClassName("tableUnitType _uSpan")(0).innerText ' features
Next
ws.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
ws.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
.Quit
End With
End Sub
最佳答案
使用 iframe src 然后处理我们之前讨论过的方式(作为我的偏好),即识别行然后将行 html 转储到代理 HTMLDocument
变量以充分利用 querySelector
粒度级别。我忽略了 reserve
,因为这显示没有变化,您可以使用默认值自动填充它们。如果需要,可以轻松添加它们。
Option Explicit
'VBE > Tools > References: Microsoft Internet Controls
Public Sub GetData()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.Navigate2 "https://www.clickandstor.com/CAS_2.5.16/sorter/controller.php?fid=1162&mode=unit-table-p&target=casDiv1&width=100%25&height=100px&js=1&displayId=lsFramer_0&u=https%3A%2F%2Fwww.gostoreit.com%2Flocations%2Fgeorgia%2Fcumming%2Fgo-store-cumming%2F&&v_in=2.5.16&dn=1559990768103&1559990768"
While .Busy Or .readyState < 4: DoEvents: Wend
Dim html2 As HTMLDocument, rows As Object, i As Long, results(), headers()
headers = Array("Size", "Description", "On site price", "Web Price", "Offer")
Set html2 = New HTMLDocument
Do
Set rows = .document.querySelectorAll(".unitRow") '.size_txt")
Loop While rows.Length = 0
ReDim results(1 To rows.Length, 1 To UBound(headers) + 1)
On Error Resume Next
For i = 1 To rows.Length - 1
html2.body.innerHTML = rows.item(i).outerHTML
results(i, 1) = html2.querySelector(".size_txt").innerText
results(i, 2) = GetDescription(html2.querySelectorAll(".unitMoreHelpTitle, .pop_spacer_li"))
results(i, 3) = html2.querySelector(".wasPrice").innerText
results(i, 4) = html2.querySelector(".ls_unit_price").innerText
results(i, 5) = html2.querySelector(".helpDiscounts").innerText
Next
On Error GoTo 0
.Quit
End With
With ThisWorkbook.Worksheets("Sheet1")
.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End With
End Sub
Public Function GetDescription(ByVal nodeList As Object)
Dim i As Long, arr()
ReDim arr(0 To nodeList.Length - 1)
For i = 0 To nodeList.Length - 1
arr(i) = nodeList.item(i).innerText
Next
GetDescription = Join$(arr, Chr$(32))
End Function
如果您想要通过 iframe 进行更详细的方法。我选择导航到 iframe 的 src,但您可以使用 .document.getElementById("lsFramer_0").contentDocument.querySelector
语法访问
Option Explicit
'VBE > Tools > References: Microsoft Internet Controls
Public Sub GetData()
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.Navigate2 "https://www.gostoreit.com/locations/georgia/cumming/go-store-cumming/"
While .Busy Or .readyState < 4: DoEvents: Wend
.Navigate2 .document.querySelector("#lsFramer_0").src
While .Busy Or .readyState < 4: DoEvents: Wend
Dim html2 As HTMLDocument, rows As Object, i As Long, results(), headers()
headers = Array("Size", "Description", "On site price", "Web Price", "Offer")
Set html2 = New HTMLDocument
Do
Set rows = .document.querySelectorAll(".unitRow") '.size_txt")
Loop While rows.Length = 0
ReDim results(1 To rows.Length, 1 To UBound(headers) + 1)
On Error Resume Next
For i = 1 To rows.Length - 1
html2.body.innerHTML = rows.item(i).outerHTML
results(i, 1) = html2.querySelector(".size_txt").innerText
results(i, 2) = GetDescription(html2.querySelectorAll(".unitMoreHelpTitle, .pop_spacer_li"))
results(i, 3) = html2.querySelector(".wasPrice").innerText
results(i, 4) = html2.querySelector(".ls_unit_price").innerText
results(i, 5) = html2.querySelector(".helpDiscounts").innerText
Next
On Error GoTo 0
.Quit
End With
With ThisWorkbook.Worksheets("Sheet1")
.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End With
End Sub
Public Function GetDescription(ByVal nodeList As Object)
Dim i As Long, arr()
ReDim arr(0 To nodeList.Length - 1)
For i = 0 To nodeList.Length - 1
arr(i) = nodeList.item(i).innerText
Next
GetDescription = Join$(arr, Chr$(32))
End Function
关于html - 按标签和类别抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505229/
所以我使用一个带有整个 block 的标签作为链接,它是一个产品展示,所以你点击它会转到产品页面。现在我创建了一个标签作为链接到购物车页面的按钮。所以我让它工作,但是当我点击购物车按钮时,两个页面都会
根据 Web 标准,创建带有标题 1 的链接的正确代码是什么? 是吗 stackoverflow 或 stackoverflow 谢谢 最佳答案 根据网络标准,您不能将 block 元素放入内
在Java中它是这样写的..当我移植这段代码时...意识到没有这样的东西 break 和continue . 我知道这些命令没有包含在内,因为在使用带有命令的 goto 时必须有一种更简洁的方法来执
我们有一个相当标准的发布过程,使用 Visual Source Safe 在发布之前标记构建。这允许我们在出现任何问题时从该标签中获取,并在需要更改时使用它进行分支。 我们有几个不同的项目,并且总是使
我必须创建一个搜索内容,其中包含搜索框、标题和段落描述。默认情况下,描述被禁用,当我输入一些与描述文本匹配的文本时,描述段落标签应该打开。一些匹配的演示是这样的: [ fiddle ][1] 但默认情
我一直在阅读有关 的文档标签,我似乎无法理解它与简单地使用 有何不同那是 display: none; 文档:template tag 例子 对比 例子
我需要一个脚本来复制当开关按钮打开时标记,当开关按钮关闭时删除标记。我需要一个简单的方法。这是开关按钮: 我试过这个: var change
JSF 是一个 MVC 框架,但我很困惑为什么我们已经有了这么多 HTML 标签还需要 JSF 标签。毫无疑问,JSF 简化了很多事情。我想进一步了解 JSF 中的模型 View 和 Controll
我在这个 website 上看到了那些 html 代码: Homepa
我添加了 photoswipe 插件,可以使用 搜索我的所有照片。标签,如果点击,照片就会变成全屏。我让它工作了,但现在我的导航栏(有 标签)在点击时会触发 photoswipe 插件。 在 ph
标签
我正在尝试截断显示自 的文本标签,但它不工作。我将样式应用于其他标签样式并且它确实有效(我看到的示例中没有一个使用 标签)。我想知道是否有人可以向我解释为什么会这样(我不是最擅长 HTML/CSS
HTML 是这样的: Menu 1 Menu 2 Sub menu 2
我可以更改 TextInputLayout 的位置 float 标签(底部 float 标签)吗?我需要为波纹管 float 标签设置正确的位置。 最佳答案 我解决了我的问题,这是我的 xml:
我的代码是 printMsg : function(data) { $("#message").html(data.bodyText); ... } 这里 data.body
我是 Scrapy 和 Xpath 的初学者,我正在寻找解析具有以下结构的网站 cat1 value1 value2
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我必须从 xml 中解析数据。这是我的 xml- 或者它的 url 是:http://mobileecommerce.site247365.com/admin/catdata.xml News f
如何创建应该允许多行数据的标记。不要说使用textarea标签。我知道,但我只想 标记因为标签具有 value 属性。所以当我从 xml 文件获取值时,我应该使用 jquery 语法动态获取.. 最佳
我有一个页面使用我定义的某些样式。 在同一页面上,我刚刚导入了一个使用自己样式的外部 jQuery 插件,例如,包括 。被我自己覆盖的标签样式。 如何确保我的样式表中的样式不会覆盖 jQuery 插件
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我是一名优秀的程序员,十分优秀!