标题: Python,又见Python
作者: Demon
链接: https://demon.tw/programming/python-again.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
标题出自古龙晚期小说《飞刀,又见飞刀》。《飞刀,又见飞刀》是《多情剑客无情剑》的后续,以“小李探花”李寻欢的孙子李坏与“月神”薛采月的故事为主线。标题只是为了呼应很久以前写的《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: https://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格式,解析部分就不写了。
和《Python牛刀小试》一样,给出VBS实现:
'Author: Demon 'Website: https://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没什么关系。
赞赏微信赞赏支付宝赞赏
随机文章:
python搞这种东西简直是小菜
呵呵,班门弄斧了。
膜拜呆萌叔。和讯网不错的=w=