operator库中的itemgetter在对二维列表等进行排序时,对指定key值非常方便。
例如:1 data = [[1, '湖南', '长沙'], [2,'山西','平遥']] 2 data = sorted(data, key=itemgetter(0))
即按data二维列表的第0号元素排序,再返回给data。
用到的库:re、operator
1、数据清洗
主要是对获取到的成绩源数据(html文本)通过正则表达式匹配进行筛选,从而获得我们想要的数据。
一般情况下,网页上的数据都是按一定格式排列的,我们找到这种规律,就可以对它进行清洗了。
1 import re
2 from orignal_data import main #导入自定义函数:main
3
4 text = main(verifycode_, cookies_, usr, pwd, kksj)
5 regex = re.compile(r'title="null" >(.*?)</td>')
6 orignal_data = regex.findall(text) #把所有成绩列表的数据保存为一个一维列表:orignal_data
2、数据整理
把清洗后的数据重排为可以展示给用户查看的具有数据结构的格式:二维列表。
1data = []
2#判断是否成功清洗了数据
3if orignal_data:
4 for i in range(0,len(orignal_data)):
5 if orignal_data[i] == usr:
6 data.append(orignal_data[i:(i+10)])
7 n = 0
8 while True:
9 try:
10 if data[n][-1] != '正常':
11 data[n].insert(6, '--')
12 else:
13 data[n].append(' ')
14 n += 1
15 except:
16 break
17 data = sorted(data, key=itemgetter(2, 3), reverse=True)
完整源代码
1import re
2from operator import itemgetter
3
4from orignal_data import main
5
6def parser_data(verifycode_, cookies_, usr ,pwd, kksj):
7 '分析数据'
8 #清洗数据
9 text = main(verifycode_, cookies_, usr, pwd, kksj)
10 regex = re.compile(r'title="null" >(.*?)</td>')
11 orignal_data = regex.findall(text)
12 #整理数据
13 data = []
14 if orignal_data:
15 for i in range(0,len(orignal_data)):
16 if orignal_data[i] == usr:
17 data.append(orignal_data[i:(i+10)])
18 n = 0
19 while True:
20 try:
21 if data[n][-1] != '正常':
22 data[n].insert(6, '--')
23 else:
24 data[n].append(' ')
25 n += 1
26 except:
27 break
28 data = sorted(data, key=itemgetter(2, 3), reverse=True)
29
30 return data
唔~ 码完这一弹,就要告一段落了,我要去野外进行为期半个月的实习了,一个叫大围山的地方。条件艰苦,电脑无法随行,先停更半个月喽~ 请叫我佛系小编。