scriptcontrol处理翻页问题。

示例展示通过VBA获取页面http://stock.n8n8.cn/flows?zjlx=110,总共63页数据。我仅展示抓取2页数据。通过浏览器的开发工具获得数据源的页面地址为下图中的Request URL:

通过鼠标翻页多次网址比较我们会发现url里面的begin参数就是控制页面的。0表示第1页,依次递增。r是一个随机数。我们可以通过rnd()函数生成。翻页通过循环修改url中的begin参数值就可以实现。那么我们抓取页面的内容就很容易了。

http://stock.n8n8.cn/index.php?m=data&c=index&a=getZjlx&begin=0&amount=40&bAsc=0&board=1&sortType=110&r=0.7167375778692158

我们发现数据源是json格式,如下图所示,显示的是unicode编码字符,不用担心,后面scriptcontrol会自动解码转为我们日常所见的正常字符:

vba代码如下:

Sub test()
    Dim Sc As Object, url As String, i As Integer, json As String, js As String
    Set Sc = CreateObject("scriptcontrol")
    Sc.Language = "javascript"
    ActiveSheet.UsedRange.Clear
    [A1:M1] = [{"代码","名称","最新价","涨幅","成交额","换手率","主力净买","跟风净买","散户净买","↑资金净买","5日主力","10日主力","20日主力"}]
    With CreateObject("Msxml2.XMLHTTP")
        For i = 0 To 1
            Randomize
            url = "http://stock.n8n8.cn/index.php?m=data&c=index&a=getZjlx&begin=" & i & "&amount=40&bAsc=0&board=1&sortType=110&r=" & Rnd()
        .Open "GET", url, False
        .send
        Do
            DoEvents
        Loop Until .Status = 200 And .readyState = 4
        json = .responsetext
        With Sc
            .addObject "rng", Cells(Rows.Count, 1).End(3)(2)
            js = "var js=" & json & ",a=js.response,b=a.bodRptArray,row=1;for(i in b){r=row++;rng(r,1)=b[i].code;rng(r,2)=b[i].name;jj=b[i].values;col=3;for (k in jj){rng(r,col++)=jj[k];}}"
            .eval (js)
            .Reset
        End With
        Next
    End With
Set Sc = Nothing
End Sub

结果部分数据展示如下面的图片,我翻了2页的数据刚好80条,检查了一下首位的数据,也符合预期:

实现代码如上。微软的scriptcontrol只能适用于32位的office。64位的office可以使用微软的microsoft html object library实现同样的。当然还有支持64位的第三方的scriptcontrol控件,下载地址:https://tablacus.github.io/scriptcontrol_en.html,用法同官方的scriptcontrol一样,下载的地址里有示例的展示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值