xiaole's profiledingxl05的共享空间PhotosBlogListsMore Tools Help

Blog


    August 15

    vbscript 抽取网页数据

    最近帮人解决一个问题,从类似sohu财经这样的网站把指数抓取下来并写到excel中,http://q.stock.sohu.com/zs/000001/cjmx.shtml,如果要取1年的数据,手工很麻烦,所以需要一种自动化的办法。

    这个网页特殊的地方在于table标签里是没有数据的。数据大概是通过ajax后来写进去的,虽然能看到表格的数据,但是在html文件里找不到。原来想用perl在cpan上找一些模块,但是这些模块并不会执行javascript,因此转而考虑采用IE或者webbrowser控件。由于这个东西只是个人应用,没有太高要求,所以考虑脚本。网上有很多使用Webbrowser的方案,也有一些软件比如iMacro什么的,考虑最终需求,还是采用脚本,以下是代码。

    Set objIE = CreateObject("InternetExplorer.Application")

    objIE.Visible = True
    objIE.Navigate "http://q.stock.sohu.com/zs/000001/cjmx.shtml"
    Do While (objIE.Busy): Loop

    '不知道ajax什么时候结束,等5秒
    WScript.Sleep 5000

    set cp=objIE.Document.body.createTextRange
    cp.execCommand "Copy"

    Set objExcel = CreateObject("Excel.Application")

    objExcel.Visible = True
    objExcel.Workbooks.Add
    set ws=objExcel.Workbooks(1).WorkSheets("Sheet1")
    ws.paste

    '保存
    objExcel.Workbooks(1).saveAs  "dxltest.xls"

    对于通过提交form查询数据的网页,先用httpwatch查看整个交互过程。解析get或post方法,通过构造相应的URL即可获得。我安装了activeperl,发现其中有一个WWW::mechanic模块做这个不错。

    August 02

    星期六

    1,周三上午Nortel的人来忽悠他们的交换机,下午网通的人来忽悠他们的NGN。现在得知拉光纤进大楼的话,一般物业可能会敲竹杠50W左右。
    2,周五下午开会,加强奥运安保。
    3,其余时间比较清闲