学习模拟登录——获取参数servertime等
2015-12-08 15:36:59
获取get包的参数
别人的代码:
1 def sServerData(serverData): 2 p = re.compile('\((.*)\)') # 定义正则表达式 3 jsonData = p.search(serverData).group(1) # 通过正则表达式查找并提取分组1 4 data = json.loads(jsonData) 5 serverTime = str(data['servertime']) # 获取data中的相应字段,Json对象为一个字典 6 nonce = data['nonce'] 7 pubkey = data['pubkey'] 8 rsakv = data['rsakv'] # 获取字段 9 return serverTime, nonce, pubkey, rsakv
其中jsondata是一个str类型的变量,要提取相应字段,就必须转化成字典使用。上面的json.load()函数可以编码(补充函数的功能)
还可以使用下列方法:
1 >>> a = "{'a': 'hi', 'b': 'there'}" 2 >>> b = eval(a) 3 >>> b 4 {'a': 'hi', 'b': 'there'} 5 >>> exec ("c=" + a) 6 >>> c 7 {'a': 'hi', 'b': 'there'} 8 >>>
最后的代码可以写成
1 #-*- coding:UTF-8 -*- 2 #爬虫的servertime的测试 3 import urllib2 4 import re 5 import json 6 serverurl="http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.18)&_=1407721000736" 7 serverdata=urllib2.urlopen(serverurl).read() 8 p = re.compile('\((.*)\)') # 定义正则表达式 9 jsonData = p.search(serverdata).group(1) 10 zidata=eval(jsonData) 11 #jsondata是一个str类型的变量!! 12 data = json.loads(jsonData) 13 ##此处用match会报错:NONE对象没有group方法 14 serverTime = str(data['servertime']) # 获取data中的相应字段,Json对象为一个字典 15 nonce = data['nonce'] 16 pubkey = data['pubkey'] 17 rsakv = data['rsakv'] # 获取字段 18 print serverTime ,nonce,pubkey,rsakv 19 20 print serverdata 21 print jsonData 22 print type(jsonData)#["secvertime"] 23 print type(zidata)#["secvertime"] 24 print zidata["servertime"] 25 print zidata["nonce"] 26 print zidata["pubkey"] 27 print zidata["rsakv"] 28 #print data