【问题标题】:How to grab a href from a specific URL by class?如何按类从特定 URL 中获取 href?
【发布时间】:2022-01-19 14:56:32
【问题描述】:

我需要 Excel VBA 代码,当用户名输入到电子表格中的特定单元格时触发。然后导航到在本例中是工作目录的网页。然后它找到 div 类“panel bg-brick-red managed-by”> 并将与该类关联的 href 作为字符串返回。

然后我希望从该字符串中提取 href 的特定部分并将其粘贴到电子表格中的单元格中。

因此,您在电子表格中的特定单元格中输入用户名以触发 sub,它会导航到我们内部目录的 url 以查找此人,然后从该页面中获取他们的直线经理的工资号码,从 href 中剥离该号码从 href 中支付号码,然后将结果粘贴到 Excel 中指定的结果单元格中。

【问题讨论】:

  • 这里有很多关于抓取网络的问答 - 有些甚至有可以复制和编辑的代码。
  • 是的,我已经搜索过,但看不到我实际描述的任何内容,因此提出了一个新问题,而不是像往常一样从另一个代码中获取。

标签: html excel vba class screen-scraping


【解决方案1】:

从字符串中提取内容的一种灵活方法是使用正则表达式模式匹配。添加对 Microsoft Internet Controls 的引用。

Option Explicit

Sub ExtractFromURL()

    Dim IE As Object, URL As String
    Dim links As Object, link As Object
    Dim href As String, PayNo As String
    
    Set IE = New InternetExplorerMedium
    IE.Visible = True
    
    URL = "http://some/web/page"
    IE.navigate URL
    
    Do Until IE.readyState >= 4
        DoEvents
    Loop
    
    ' find element
    Set links = IE.document.getElementsByClassName("panel bg-brick-red managed-by")
    Set link = links(0).getElementsByTagName("a")
    href = link(0).href
    
    ' build regex to pattern match PayNp
    Dim regex As Object, m As Object 'match
    Set regex = CreateObject("vbscript.regexp")
    With regex
       .Global = False
       .MultiLine = False
       .IgnoreCase = True
       .Pattern = "(\d{5,6})" 'a number with 5 to 6 digits
    End With
    
    ' extract number
    If regex.test(href) Then
         Set m = regex.Execute(href) ' match
         PayNo = m(0)
         MsgBox PayNo & " extracted from " & href
    Else
         MsgBox "No number in " & href
    End If
    IE.Quit
    
End Sub

【讨论】:

  • 您好,必须将 internet explorermedium 更改为普通的 internet explorer 才能停止错误,并将支付正则表达式更改为包含一个字符后跟 6 个数字,并将 msg 框中的结果更改为进入所需的单元格和我很高兴非常感谢你
  • 如何在类中搜索 p 标签而不是 href?就像在一个类中,有几行不同的文本由

    分隔,如果可能的话,我也想搜索它们?

  • @DaveyBoi_Uk 你试过links(0).getElementsByTagName("p") 吗?
  • 是的,但是当我尝试从 Link 对象中检索时,它说对象不允许它。我想抓取文本并将其放入字符串中
  • 设置链接 = IE.document.getElementsByClassName("profile-data") 设置链接 = links(0).getelementsbyTagName("p") Pline = link.innertext
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2011-03-18
  • 2020-10-21
  • 2015-04-03
  • 2013-07-07
相关资源
最近更新 更多