Deep BlueVBScriptWMIPHPC语言JavaScriptWindows API路由器Windows函数Python

Python,又见Python

标题出自古龙晚期小说《飞刀,又见飞刀》。《飞刀,又见飞刀》是《多情剑客无情剑》的后续,以“小李探花”李寻欢的孙子李坏与“月神”薛采月的故事为主线。标题只是为了呼应很久以前写的《Python牛刀小试》,内容上并没有联系。

自从晨光BT与交大知行信息交流平台整合之后,我就很少登陆论坛了,只是偶尔下几部电影看看。早上为了打发无聊的时间,到论坛上逛了逛,看到一个帖子:

[其他技术] python高手们,进来看看!
http://quote.hexun.com/default.html
现在有这样一个网址,上面有上证指数,深证指数,哪位可以实现利用python把这两个指数抓取下来(从纷繁的网页中把需要的数据分离出来,貌似用什么正则表达式,不太懂啊),还有抓下来后赋值给a,b,以实现对这两个数据在其他函数中的调用。最重要的是要实现动态抓取,定义一个自己需要的时间间隔(有高人指点说用简单的,sleep(60)秒,就成了每隔60秒去抓)把数据抓取下来(在开盘的时候这个数据是变化的,就是为了借助这一特点模拟下动态数据收集仪)
求顶啊 ,让python高手们都看见啊 !求帮助啊 !
谢谢啊,万分感谢啊!

Python我已经很久没有碰过了,我碰到的大部分问题都可以用VBS解决,不能用VBS解决的,就用C语言搞定,实在是不知道用Python来做什么。我只看过一点点Python,别说高手,连菜鸟都算不上。

但是上面的问题,和Python无关,与JavaScript有染,因为那个网址中的“上证指数”和“深证指数”都是用AJAX动态生成的,所以解决问题的关键是找出获取这两个数据的AJAX请求。用Firebug调试了半天,终于找到了:

StockCodeRequest = new function(){
// private fields 

// private static methods 

// public fields 
    this.scriptid ="StockCodeRequest";
    this.url = "http://quote.tool.hexun.com/hqzx/getstock.aspx";
    this.code = "";
// public methods 
    this.CreateLink = function()
    {
        var request = this.url + "?";
        if(!Common.IsCodeMarket(this.code))
        {
            this.code = "000001_1|399001_2";
        }
        request += "stocklist=" + this.code + "&time=" + Common.Time();
        return request;
    }
    this.Request = function()
    {
        Common.AppendDataArray(this.scriptid,this.CreateLink());
    }
// constructor
    {
    }
}

用JavaScript向http://quote.tool.hexun.com/hqzx/getstock.aspx发出请求,参数为

"stocklist=" + this.code + "&time=" + Common.Time()

其中this.code = "000001_1|399001_2",找出Common.Time()就行了:

Common = new function(){
// private static fields 

// public static method 

// 省略其余代码
    this.Time = function()
    {
        var time = new Date();
        var h = time.getHours();
        var m = time.getMinutes();      
        var s = Math.floor(time.getSeconds()/10)*10; 
        var arg = (h<10 ? "0" + h : h) + "" + (m<10 ? "0" + m : m) + "" + (s<10 ? "0" + s : s);
        return arg;
    }
// 省略其余代码
}

最后把上面的JavaScript改写成相应的Python就行了:

#Author: Demon
#Website: http://demon.tw
#Email: 380401911@qq.com
import urllib, math
from datetime import datetime
t = datetime.today()
h = t.hour
m = t.minute
s = math.floor(t.second / 10) * 10
arg = "%02d%02d%02d" % (h, m, s)
params = urllib.urlencode({"stocklist": "000001_1|399001_2", "time": arg})
f = urllib.urlopen("http://quote.tool.hexun.com/hqzx/getstock.aspx?%s" % params)
print f.read()

这里只写了HTTP请求部分,返回的数据是JSON格式,解析部分就不写了。

Stock

和《Python牛刀小试》一样,给出VBS实现:

'Author: Demon
'Website: http://demon.tw
'Email: 380401911@qq.com
Set http = CreateObject("Msxml2.XMLHTTP")
h = Hour(Now)
m = Minute(Now)
s = Int(Second(Now) / 10) * 10
arg = AddZero(h) & AddZero(m) & AddZero(s)
url = "http://quote.tool.hexun.com/hqzx/getstock.aspx?stocklist=000001_1|399001_2&time=" & arg
http.open "GET", url, False
http.send
WScript.Echo http.responseText

Function AddZero(n)
    If n < 10 Then n = "0" & n
    AddZero = n
End Function

这个问题真的和Python没什么关系。


http://ken.gw.to/