【问题标题】:HTTP request taking 10+ secondsHTTP 请求耗时 10+ 秒
【发布时间】:2016-07-13 21:05:51
【问题描述】:

谁能解释一下为什么加载这段代码需要这么长时间?我已经在浏览器中尝试过,加载只需大约 4 秒。有什么方法可以禁用 VBA 网络抓取中的图像加载?

(请注意,等待在send 行上,加载时间超过 10 秒,在我看来这太过分了?)

Sub FetchIndividualURL()
    Dim XMLHTTP as Object
    Dim HTMLdoc as Object
    Set XMLHTTP = CreateObject("MSXML2.serverXMLHTTP")

    URL = "http://www.gumtree.com.au/s-ad/lansvale/cars-vans-utes/2011-subaru-forester-x-grey-wagon/1106783884"

        With XMLHTTP
            .Open "GET", URL, False
            .setRequestHeader "Content-Type", "text/xml"
            .send
            Set HTMLdoc = CreateObject("HTMLFile")
            HTMLdoc.body.innerhtml = .responsetext
        End With

End Sub

【问题讨论】:

  • 我的第一次加载大约需要 8 秒。我猜这是由于加载 javascripts。除了在浏览器中加载更快,因为有些项目被缓存了。

标签: excel vba web-scraping xmlhttprequest


【解决方案1】:

接受的答案并不完全正确。

有更多的请求选项需要考虑,根据网站的不同,它们的效率可能会有很大差异,没有一个是最快的或最慢的。有时,其中一个请求通常需要 10 秒以上,而另一个只需要 2 秒。

Set XMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")

【讨论】:

    【解决方案2】:

    Xmlhttprequest.send 不加载图片,也不加载 js 代码。这将获取 url 引用的资源的原始客户端代码。这段代码没有什么可以优化的。

    您可以做的是使请求异步并让事件处理程序来处理传入的数据。您可以让多个 Xmlhttprequest 对象并行下载数据。

    有一篇关于如何在 excel 中正确执行此操作的博客文章:http://dailydoseofexcel.com/archives/2006/10/09/async-xmlhttp-calls/

    它描述了如何进行异步调用,如何以及为什么为事件处理程序使用包装类。

    【讨论】:

    • 太好了,感谢@Shadow 提供的信息。我会看看我是否可以在我的项目中实现它
    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多