【问题标题】:IE excel vba to fetch dataIE excel vba 获取数据
【发布时间】:2019-02-08 04:13:41
【问题描述】:

我需要从网站获取数据。网站内容跟随标签,我需要提取href属性。

link rel='canonical' href='http://www.wingatecinci.com'

为此,我编写了以下代码来提取 Excel 中的 href 属性

    Option Explicit
    Sub Tester()
    Dim IE As New InternetExplorer
    Dim i As Long
    Dim Cano As String

    Range("A1").Value = "Cano"

    Set IE = New InternetExplorer
    URL = "http://www.wingatecinci.com/"
    IE.navigate Url
    IE.Visible = True

    Do While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    Cano = IE.document.getElementsByTagName("canonical")(i).innerHTML
    Range("A" & i + 2).Value = Cano
End Sub

但我没有成功,并且遇到错误请参阅此屏幕截图 http://prntscr.com/kpy9dh 任何人都可以调查一下并帮助我吗?

【问题讨论】:

  • 欢迎来到Stack Overflow请提供更多关于您正在尝试做什么的信息(包括您正在抓取的 HTML 示例和所需的输出),并描述你的问题。 (“没有成功”没有帮助。)查看tour(您将获得您的第一个徽章!)并查看“How to Ask”以及如何创建minimal reproducible example乙>。此外,这是来自网站顶级用户的“完美问题”checklist。您可以edit您的问题通过添加更多信息来澄清。
  • 请注意,由于Dim 语句中不需要的, 逗号,您的代码根本不会编译。还有未声明的变量。在模块顶部添加Option Explicit 将帮助您识别未声明的变量和对象。
  • 请说明您的目标。您有一个没有值的 i 变量,所以如果这是正确的元素集合,您希望从集合中获得哪个索引?显示相关的 html 会有所帮助。
  • 在给定的链接中没有这样的元素,除了超链接
  • 嗨,Karthick,网站中有一个元素,见下文'

标签: excel vba internet-explorer web-scraping


【解决方案1】:

您可以为元素添加等待,并使用 CSS 属性选择器来定位该属性。这目前有一个 5 秒的循环来尝试定位元素。

Option Explicit
Public Sub GetLink()
    Dim IE As New InternetExplorer, ele As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5
    With IE
        .Visible = True
        .navigate "http://www.wingatecinci.com/"

        t = Timer
        Do While ele Is Nothing
            DoEvents
            On Error Resume Next
            Set ele = .document.querySelector("[rel='canonical']")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop
        If Not ele Is Nothing Then Debug.Print ele.href
        .Quit
    End With
End Sub

参考资料:

  1. Microsoft HTML 对象库
  2. Microsoft Internet 控件

【讨论】:

  • 感谢您的回复,我已经尝试了上面的代码,但是它显示了一个错误消息,请看这个截图错误prnt.sc/kqbfjj
  • 是否反复产生此错误?从我的角度工作就好了。如果你反复遇到这个问题,试试 Dim IE As New InternetExplorerMedium
  • 是的,它仍然显示相同的错误。我已将 Dim IE 作为新 InternetExplorerMedium 应用,但仍然有相同的错误。你能建议任何其他选择吗?
  • 也许先到办公室repair。然后查看有关 SO 的任何文章。 stackoverflow.com/questions/12270922/…。如果做不到这一点,你有 IT 部门可以合作吗?
【解决方案2】:

这两行引用i 作为变量:

Cano = IE.document.getElementsByTagName("canonical")(i).innerHTML
Range("A" & i + 2).Value = Cano

但您尚未在代码中的任何位置设置 i 的值。你的意思是把它放在一个循环中吗?


这里的“标签”也是&lt;link&gt; - "canonical" 部分是该标签的属性,因此您需要在代码中进一步详细说明以测试这些:

For Each el In IE.Document.getElementsByTagName("link")
    If el.hasAttribute("link") Then
        // do something with this element
    End If
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2012-08-02
    • 2021-10-07
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多