Excel VBA Scrape网页

时间:2014-09-30 18:54:35

标签: vba excel-vba dom web-scraping xmlhttprequest

我正在尝试抓取以下网页

http://www.bseindia.com/markets/equity/EQReports/StockPrcHistori.aspx?flag=0&expandable=7

搜索框(显示输入脚本名称/代码/ ID),是我遇到困难的地方, 我可以使用以下代码将框的值设置为脚本ID 500222

IE.Document.All.Item("ctl00$ContentPlaceHolder1$GetQuote1_smartSearch").innerText = "500222"

但是,如果您尝试在搜索框中手动输入值 500222 ,则会出现一个下拉框,该框将是相应图书的名称。但是,我无法通过VBA使其工作。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:5)

在网页.onkeypress上,分配给文本框的事件处理函数发送HTTP请求,并在每次按键时收到响应。然后它会在下拉列表中显示建议的项目。您不需要弄清楚处理程序功能如何工作。只需打开您问题的网址e。 G。在Chrome中,按 F12 打开开发人员工具窗口,转到网络标签,其中列出了所有页面XHR,在搜索框中输入一些文字,然后在将看到将显示新请求。点击其中一个,在标题标签中,您可以找到请求网址

network tab

你可以像onkeypress事件处理程序那样重现这样的XHR,并从响应中解析Scrip Name,这里是示例VBA代码:

Option Explicit

Sub SmartGetQuoteData()

    Dim sScripID As String
    Dim sResp As String
    Dim sAllItems As String
    Dim sFirstCode As String
    Dim oXHR As Object
    Dim oDoc As Object
    Dim oBody As Object

    ' set your code here
    sScripID = "500222"

    ' make XHR
    Set oXHR = CreateObject("Microsoft.XMLHttp")
    oXHR.Open "GET", "http://www.bseindia.com/SiteCache/90D/SmartGetQuoteData.aspx?Type=EQ&text=" & sScripID, False
    oXHR.Send
    sResp = oXHR.ResponseText
    ' convert HTML to plain text
    Set oDoc = CreateObject("htmlfile")
    oDoc.Write sResp
    Set oBody = oDoc.GetElementsByTagName("body")(0)
    sAllItems = oBody.InnerText
    ' split response and get 1st part
    sFirstCode = Split(sAllItems, "|")(0)

    ' result output
    MsgBox sAllItems ' JCT ELECTRONICS LTD|JCTEL|500222
    MsgBox sFirstCode ' JCT ELECTRONICS LTD

End Sub