【问题标题】:How to pull image from Amazon UK如何从英国亚马逊拉图像
【发布时间】:2021-02-23 21:02:41
【问题描述】:

我正在尝试从 Amazon.co.uk 下载高分辨率图片。我尝试了中给出的代码 [thread][1] 我遇到了一些问题。

@QHarr 的代码适用于给定的 Amazon.in 网站,但当我尝试使用 Amazon.co.uk 时

.querySelector("#landingImage").getAttribute("data-old-hires") 什么都不返回。这是我正在测试的代码。

Public Sub GetInfo()
    Dim Html As HTMLDocument, results()
    Set Html = New HTMLDocument
    
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.amazon.co.uk/dp/product/B01GFJWHZ0", True
        .send
        Html.body.innerHTML = .responseText
        
        With ThisWorkbook.Worksheets("Sheet1")
            .Cells(1, 2) = Html.querySelector("#productTitle").innerText
            .Cells(1, 2).Offset(0, 1) = Html.querySelector("#landingImage").getAttribute("data-old-hires")
        End With
    End With

End Sub

知道我到底做错了什么吗?

【问题讨论】:

    标签: excel vba amazon


    【解决方案1】:

    我的猜测是响应 html 被破坏了。但是,您可以轻松地从响应字符串中正则表达式输出该位。

    请注意,异步参数也设置为 False,以便有时间加载数据。我对您的代码达到您所说的程度感到有些惊讶。它也应该在 HTMLDocument 中没有与该选择器匹配的事实而绊倒。

    Public Sub GetInfo()
        'tools > references > Microsoft HTML Object Library
        Dim re As Object, html As MSHTML.HTMLDocument, xhr As Object, s As String
    
        Set re = CreateObject("VBScript.RegExp")
        Set xhr = CreateObject("MSXML2.XMLHTTP")
        Set html = New MSHTML.HTMLDocument
        re.Pattern = """hiRes"":""(.*?)"""
        
        With xhr
            .Open "GET", "https://www.amazon.co.uk/dp/product/B01GFJWHZ0", False
            .setRequestHeader "User-Agent", "Mozilla/5.0"
            .send
            s = .responseText
            html.body.innerHTML = s
        End With
        With ThisWorkbook.Worksheets("Sheet1")
            .Cells(1, 2) = html.querySelector("#productTitle").innerText
            .Cells(1, 3) = re.Execute(s)(0).SubMatches(0)
        End With
    End Sub
    

    正则表达式:

    【讨论】:

    • 谢谢,是的,当我测试不同的选项时,异步被保留为 True。我刚刚将您的代码转换为 vba/excel 函数,以通过 asin 获取图像 url。我尝试了一个包含 14 个 asins 的列表,该列表在处理 excel 程序时会挂起。我多次使用 DoEvents 来避免这种情况,但没有太大改善。问题是我计划在具有 100 个此类值的表上运行脚本。任何提示?这是我的代码。
    • With xhrDoEvents.Open "GET", strUrl, FalseDoEvents.setRequestHeader "User-Agent", "Mozilla/5.0"DoEvents.send.sends = .responseTexthtml.body.innerHTML = s@9
    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2016-11-26
    • 2012-12-08
    相关资源
    最近更新 更多