qiandao
qiandao copied to clipboard
能否加入对json的支持
对于返回结果为json的response,能否像requests库中.json()
那样解析,这样可以大大方便数据选择。
有什么是正则获取不到的吗?
之前对问题的描述不太准确,准确的来说是,如何在变量提取过程中,将之前已经提取过的一部分变量带入新的提取表达式中。
至于对于json的支持也仅仅是锦上添花的东西,并不是主要问题。
举个例子来说吧。
$ curl 'http://book.sfacg.com/ajax/ashx/Common.ashx?op=getSigninInfoNew&year=2017&month=5&_=1493700308445' -H 'Host: book.sfacg.com' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2869.0 Safari/537.36' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: http://book.sfacg.com/signin/' -H 'X-Requested-With: XMLHttpRequest' -H 'Cookie: middle2=1; validateCode=BAD8DDCA90355D457106FFF879B00B66; .SFCommunity=75EE70E3A82C4720C03E7F9ED95D8215944D71BFA3B3D7261581B979E4A0812E08023664FCFE2144A9D02EFBDC089E56674723374D7FA01EE57E72DA8444BFF9E24706005DF9F4BCC42BAF2CE26D0BBAF054945E0110A37243B00624A7BBB854; dnt=userid=2868333&password=xCOsOaB8htvNUZ8htEtXX4KTazWr%2fNORw%2bUg62%2bY3axNMjyC%2fD4a0w%3d%3d&avatar=avatars%2fcommon%2f2009-06-04_0-33-46.jpg&tpp=0&ppp=0&pmsound=0&invisible=0&referer=index.aspx&sigstatus=0&expires=10080' -H 'DNT: 1' -H 'Connection: keep-alive'
{"status":200,"data":{"daySignin":[{"day":1,"hasSignin":true,"continuousSignin":1},{"day":2,"hasSignin":false,"continuousSignin":0},{"day":3,"hasSignin":false,"continuousSignin":0},{"day":4,"hasSignin":false,"continuousSignin":0},{"day":5,"hasSignin":false,"continuousSignin":0},{"day":6,"hasSignin":false,"continuousSignin":0},{"day":7,"hasSignin":false,"continuousSignin":0},{"day":8,"hasSignin":false,"continuousSignin":0},{"day":9,"hasSignin":false,"continuousSignin":0},{"day":10,"hasSignin":false,"continuousSignin":0},{"day":11,"hasSignin":false,"continuousSignin":0},{"day":12,"hasSignin":false,"continuousSignin":0},{"day":13,"hasSignin":false,"continuousSignin":0},{"day":14,"hasSignin":false,"continuousSignin":0},{"day":15,"hasSignin":false,"continuousSignin":0},{"day":16,"hasSignin":false,"continuousSignin":0},{"day":17,"hasSignin":false,"continuousSignin":0},{"day":18,"hasSignin":false,"continuousSignin":0},{"day":19,"hasSignin":false,"continuousSignin":0},{"day":20,"hasSignin":false,"continuousSignin":0},{"day":21,"hasSignin":false,"continuousSignin":0},{"day":22,"hasSignin":false,"continuousSignin":0},{"day":23,"hasSignin":false,"continuousSignin":0},{"day":24,"hasSignin":false,"continuousSignin":0},{"day":25,"hasSignin":false,"continuousSignin":0},{"day":26,"hasSignin":false,"continuousSignin":0},{"day":27,"hasSignin":false,"continuousSignin":0},{"day":28,"hasSignin":false,"continuousSignin":0},{"day":29,"hasSignin":false,"continuousSignin":0},{"day":30,"hasSignin":false,"continuousSignin":0},{"day":31,"hasSignin":false,"continuousSignin":0}],"dayMonth":31,"dayOfWeek":1,"curDay":2}}
对于上面的请求,需要判断今天是否签到。
用正则的话,大概是如下的过程:
In [1]: text='{"status":200,"data":{"daySignin":[{"day":1,"hasSignin":true,"continuousSignin":1},{"day":2,"hasSignin":false,"continuousSignin":0},{"day":3,"hasSignin":false,"continuousSigni
...: n":0},{"day":4,"hasSignin":false,"continuousSignin":0},{"day":5,"hasSignin":false,"continuousSignin":0},{"day":6,"hasSignin":false,"continuousSignin":0},{"day":7,"hasSignin":false,"
...: continuousSignin":0},{"day":8,"hasSignin":false,"continuousSignin":0},{"day":9,"hasSignin":false,"continuousSignin":0},{"day":10,"hasSignin":false,"continuousSignin":0},{"day":11,"h
...: asSignin":false,"continuousSignin":0},{"day":12,"hasSignin":false,"continuousSignin":0},{"day":13,"hasSignin":false,"continuousSignin":0},{"day":14,"hasSignin":false,"continuousSign
...: in":0},{"day":15,"hasSignin":false,"continuousSignin":0},{"day":16,"hasSignin":false,"continuousSignin":0},{"day":17,"hasSignin":false,"continuousSignin":0},{"day":18,"hasSignin":fa
...: lse,"continuousSignin":0},{"day":19,"hasSignin":false,"continuousSignin":0},{"day":20,"hasSignin":false,"continuousSignin":0},{"day":21,"hasSignin":false,"continuousSignin":0},{"day
...: ":22,"hasSignin":false,"continuousSignin":0},{"day":23,"hasSignin":false,"continuousSignin":0},{"day":24,"hasSignin":false,"continuousSignin":0},{"day":25,"hasSignin":false,"continu
...: ousSignin":0},{"day":26,"hasSignin":false,"continuousSignin":0},{"day":27,"hasSignin":false,"continuousSignin":0},{"day":28,"hasSignin":false,"continuousSignin":0},{"day":29,"hasSig
...: nin":false,"continuousSignin":0},{"day":30,"hasSignin":false,"continuousSignin":0},{"day":31,"hasSignin":false,"continuousSignin":0}],"dayMonth":31,"dayOfWeek":1,"curDay":2}}'
In [2]: import re
In [9]: curDay=re.findall(r'curDay\":(\d+)',text)[0]
In [10]: curDay
Out[10]: '2'
In [13]: status=re.findall(r'day\":%s,\"hasSignin\":(true|false)' % curDay,text)[0]
In [14]: status
Out[14]: 'false'
第二个正则式需要,使用之前提取出来的curDay
值,查阅了一下资料,好像并不支持这样的功能。
至于之前说的json支持,只是我先写的签到脚本,然后希望可以直接用之前的表达式而已,并不是主要问题。
In [15]: import json
In [16]: tmp=json.loads(text)
In [20]: tmp['data']['daySignin'][tmp['data']['curDay']-1]['hasSignin']
Out[20]: False
可以增加一个 json_load 函数,这样就可以把变量转换成 dict 操作了。
加个json_load
函数可以呀。
那么在变量提取过程中可以使用变量吗? 这点好像没有看懂。
如果你用正则提取为变量,这个变量的类型是 string,然后把它整个转换成 json object 之后,这个变量就可以通过 {{ var.data.daySignin[var.data.curDay - 1].hasSignin }}
这样访问了。
你好 需要根据返回json 来判断 "cycle"为 "dayly"时, 去请求href的地址 ,这个目前可以实现么?