首页 > 解决方案 > Excel VBA Web Scraping IE NAVIGATE 方法 Works Vs MSXML2.XMLHTTP60 不工作

问题描述

我正在尝试从 NSE WEB SITE 中提取一个参数,网址是https://www1.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuoteFO.jsp?underlying=INDUSINDBK&instrument=FUTSTK&type=-&strike=-&expiry= 2020 年 4 月 30 日

我可以使用 IE.Navigate(Internet Explorer)方法(打开浏览器并获取数据)来抓取我想要的任何内容,但这需要很长时间,我希望快速提取结果,所以我决定使用“MSXML2.XMLHTTP60”方法,当我尝试时,响应文本,它返回内部服务器错误

下面我给出了我的两个代码,请帮助我在 MSXML2.XMLHTTP60 方法中抓取数据

标签: htmlexcelvbaweb-scraping

解决方案


这段代码对我来说运行良好。它同时使用 XMLHTTP 和 MSHTML,因此组件没有副作用:

Sub xxx()
    Dim xhr As New MSXML2.XMLHTTP60
    Dim html As New MSHTML.HTMLDocument

    With xhr
        .Open "GET", "https://www1.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuoteFO.jsp?underlying=BEL&instrument=FUTSTK&type=-&strike=-&expiry=30APR2020#", False
        .send
        'Debug.Print StrConv(.responseBody, vbUnicode)
        html.body.innerHTML = StrConv(.responseBody, vbUnicode)

    End With
    Debug.Print html.body.innerHTML

    Set xhr = Nothing
End Sub

可能问题不在 XMLHTTP 上。那里有 HTTP 代理服务器吗?如果 IE 工作但 XMLHTTP 不工作,这意味着 IE 使用 http 代理的系统设置,但 XMLHTTP 没有。所以你应该用你的代理初始化它。它有 setProxy 方法。
顺便说一句,如果对象被声明为新对象,则不必使用 CreateObject 再次对其进行初始化:

    Dim ie As New InternetExplorer
    Set ie = CreateObject("InternetExplorer.Application")

推荐阅读