【问题标题】:Can't grab the first image link out of an array of image links无法从图像链接数组中抓取第一个图像链接
【发布时间】:2021-10-12 04:12:53
【问题描述】:

我正在尝试找出一种方法来使用 vba 中的 xmlhttp 请求从 webpage 获取图像。深入挖掘后,我注意到我可以使用此属性data-lazy-srcset 访问这些图像。但是,此属性会生成一组图像链接。我想做的是从数组中捕获第一个图像链接。

Sub GetImage()
    Const Url = "https://rasamalaysia.com/grilled-honey-cajun-shrimp/"
    Dim Http As Object, Html As HTMLDocument, oImage As Object
    
    Set Html = New HTMLDocument
    Set Http = CreateObject("MSXML2.XMLHTTP")

    With Http
        .Open "Get", Url, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
        .send
        Html.body.innerHTML = .responseText
    End With
    
    Set oImage = Html.querySelectorAll("p > img")
    Debug.Print oImage(0).getAttribute("data-lazy-srcset")
End Sub

当前输出:

https://rasamalaysia.com/wp-content/uploads/2021/06/honey-cajun-grilled-shrimp3.jpg 1200w, https://rasamalaysia.com/wp-content/uploads/2021/06/honey-cajun-grilled-shrimp3-200x300.jpg 200w, https://rasamalaysia.com/wp-content/uploads/2021/06/honey-cajun-grilled-shrimp3-300x450.jpg 300w, https://rasamalaysia.com/wp-content/uploads/2021/06/honey-cajun-grilled-shrimp3-768x1152.jpg 768w, https://rasamalaysia.com/wp-content/uploads/2021/06/honey-cajun-grilled-shrimp3-1024x1536.jpg 1024w

预期输出(第一个):

https://rasamalaysia.com/wp-content/uploads/2021/06/honey-cajun-grilled-shrimp3.jpg

如何从一组图片链接中抓取第一个图片链接?

【问题讨论】:

    标签: vba web-scraping xmlhttprequest


    【解决方案1】:

    你已经很好地描述了这个问题,它至少看起来像一个简单的数组索引问题。

    将字符串用空格分割成数组,取出第一个元素。

    添加到声明的顶部

    Dim varArray as Variant
    

    然后添加行

    ' Split into an array using blank spaces as delimiter
    varArray = Split(oImage(0).getAttribute("data-lazy-srcset"), " ")
    ' This should return your first image
    Debug.Print varArray(0)
    

    【讨论】:

      【解决方案2】:

      有一种更高效、更快捷的方法。只需按size-full 类选择,对于不需要拆分字符串的元素,并且您可以直接从属性中提取为适当的图像:

      Option Explicit
      
      Sub GetImage()
          Const Url = "https://rasamalaysia.com/grilled-honey-cajun-shrimp/"
          Dim Http As Object, Html As HTMLDocument
      
          Set Html = New HTMLDocument
          Set Http = CreateObject("MSXML2.XMLHTTP")
      
          With Http
              .Open "Get", Url, False
              .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
              .send
              Html.body.innerHTML = .responseText
          End With
          
          Debug.Print Html.querySelector(".size-full").getAttribute("data-pin-media")
      
      End Sub
      

      【讨论】:

      • 这无疑是实现相同目标的更好方法。
      猜你喜欢
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2016-10-22
      • 2021-05-11
      • 2018-09-30
      相关资源
      最近更新 更多