Excel VBA Scrape网页

bab*_*doc 2 vba dom xmlhttprequest excel-vba web-scraping

我正在尝试抓取以下网页

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

在搜索框(它说进入股代名称/代码/ ID) ,在这里我有困难,我可以框的值设置为凭证编号500222通过使用下面的代码,

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

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

ome*_*pes 6

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

网络标签

你可以像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
Run Code Online (Sandbox Code Playgroud)