长安大学图书馆查询系统源代码

奇怪的py可以挂上来了。
用爬虫写的长安大学图书馆查询系统的源代码。
当做五小创作品交了上去。
虽然很丑……

制作流程和后续版本将会陆续发布。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
# -*- coding: utf-8 -*-
#!/usr/bin/env python3
__author__='ctr'
import urllib
import http.cookiejar
#import urllib2
#import cookielib
import re
import sys
import pytesser
import PIL
from pytesseract import *
from PIL import Image
from PIL import ImageEnhance
import os
import getpass
import msvcrt
import time
cj = http.cookiejar.CookieJar()
cookie_support = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(cookie_support, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
def pwd_input():
chars = []
while True:
try:
newChar = msvcrt.getch().decode(encoding="utf-8")
except:
return input("你很可能不是在cmd命令行下运行,密码输入将不能隐藏:")
if newChar in '\r\n': # 如果是换行,则输入结束
break
elif newChar == '\b': # 如果是退格,则删除密码末尾一位并且删除一个星号
if chars:
del chars[-1]
msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格
msvcrt.putch( ' '.encode(encoding='utf-8')) # 输出一个空格覆盖原来的星号
msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格准备接受新的输入
else:
chars.append(newChar)
msvcrt.putch('*'.encode(encoding='utf-8')) # 显示为星号
return (''.join(chars) )
def denglu(usr,psw):
hosturl='http://wiscom.chd.edu.cn:8080/reader/'
posturl='http://wiscom.chd.edu.cn:8080/reader/redr_verify.php'
#验证码
captcha=opener.open('http://wiscom.chd.edu.cn:8080/reader/captcha.php')
f=open('图书馆系统临时文件/1.jpg','wb')
buf=captcha.read()
f.write(buf)
f.close()
im=Image.open('图书馆系统临时文件/1.jpg').convert('L')
captcha=image_to_string(im)
#print(captcha)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36'}
postData = {'number':usr,'passwd':psw,'captcha':captcha,'select':'cert_no','returnUrl':''}
postData = urllib.parse.urlencode(postData).encode(encoding='UTF8')
request = urllib.request.Request(posturl,postData,headers)
flagg=False
try:
rt=opener.open(request)
text=rt.read().decode('UTF-8')
f=open('图书馆系统临时文件/1.html','w')
f.write(text)
f.close()
#rt=urllib.request.urlopen('http://wiscom.chd.edu.cn:8080/reader/redr_verify.php').read()
except urllib.request.URLError as e:
print('Login Failed [%s] ' %e.reason)
except urllib.request.HTTPError as e:
print ('Login Failed [%s] ' %e.code)
else:
pattern1=r"对不起,密码错误,请查实!"
pattern1=re.compile(pattern1)
matcher1 = pattern1.findall(text)
pattern2=r"wrong check code"
pattern2=re.compile(pattern2)
matcher2=pattern2.findall(text)
#print("matcher1:",matcher1)
#input()
if matcher1:
print("对不起,密码错误,请查实!")
print("按回车键重新输入")
input()
flagg=False
elif matcher2:
print("对不起,我们的验证码识别出现问题,请重新登录")
print("按回车键重新输入")
input()
flagg=False
else:
flagg=True
return flagg
def convert(s):
s=s.strip('&#x;')
s=bytes(r'\u'+s,'ascii')
return s.decode('unicode_escape')
def lishi():
f=open('图书馆系统临时文件/lishi.html','r',encoding='utf-8')
text=f.read()
#pattern1=r"t\">(.+?)</td>"
#pattern1=re.compile(pattern1)
#text1=pattern1.findall(text)
#for subtext in text1:
# print(subtext, end=' ')
#print('')
pattern2=r"<td bgcolor=\"#FFFFFF\"(.+?)>(.+?)</td>\s*?<(.+?)>(.+?)</td>\s*?<(.+?)><a(.+?)>(.+?)</a></td>\s*?<td(.+?)>(.+?)</td>\s*?<(.+?)>(.+?)</td>\s*?<(.+?)>(.+?)</td>\s*?<(.+?)>(.+?)</td>"
pattern2=re.compile(pattern2)
text2=pattern2.findall(text)
for t in text2:
pattern3=r"&#x.+?;"
pattern3=re.compile(pattern3);
text3=pattern3.findall(t[6])
pp=''
for text in text3:
pp+=convert(text)
pattern3=r"&#x.+?;"
pattern3=re.compile(pattern3);
text3=pattern3.findall(t[8])
tt=''
for text in text3:
tt+=convert(text)
print('编号:',t[1],'\n','--条码号:',t[3],'\n','--题名:',pp,'\n','--责任者:',tt,'\n','--借阅日期:',t[10],'\n','--归还日期:',t[12],'\n','--馆藏地:',t[14])
print('')
def dangqian():
f=open('图书馆系统临时文件/dangqian.html','r',encoding='utf-8')
textq=f.read()
f.close()
textt=textq
#print(text)
pattern=r"<b class=\"blue\">(.+?)</b>"
pattern=re.compile(pattern)
text1=pattern.findall(textq)
#print('当前借阅:',text1[0],'/最大借阅:',text1[1])
#print(text1)
pattern=r"\">(.+?)</td>\s*?<td.+?><a.+?>(.+?)</a> (.+?)</td>\s*?<td.+?>(.+?)</td>\s*?<td.+?><font color=>(.+?)</font></td>\s*?<td.+?>(.+?)</td>\s*?<td.+?>(.+?)</td>\s*?<td.+?>(.+?)</td>"
pattern=re.compile(pattern)
text2=pattern.findall(textq)
#print(text2)
cnt=0
for t in text2:
cnt=cnt+1
pattern3=r"&#x.+?;"
pattern3=re.compile(pattern3);
text3=pattern3.findall(t[1])
pp=''
for texttemp in text3:
pp+=convert(texttemp)
pattern3=r"&#x.+?;"
pattern3=re.compile(pattern3);
text3=pattern3.findall(t[2])
tt='/'
for texttemp in text3:
tt+=convert(texttemp)
print('编号:',cnt)
print('--条码号:',t[0])
print('--题名/责任者:',pp,tt)
print('--借阅日期:',t[3])
print('--应还日期:',t[4])
print('--续借量:',t[5])
print('--馆藏地:',t[6])
print('--附件:',t[7])
print('')
flagg=True
while flagg:
ch=input('是否选择续借?是:Y,否:N:')
if ch=='Y':
pattern=r"getInLib\(\'(.+?)\',\'(.+?)\'"
pattern=re.compile(pattern)
ids=pattern.findall(textt)
#print(type(ids[0][0]))
bookid=input('请输入续借书编号:')
captcha=opener.open('http://wiscom.chd.edu.cn:8080/reader/captcha.php')
f=open('图书馆系统临时文件/1.jpg','wb')
buf=captcha.read()
f.write(buf)
f.close()
im=Image.open('图书馆系统临时文件/1.jpg').convert('L')
captcha=image_to_string(im)
#print(captcha)
mtime=time.time()
posturl='http://wiscom.chd.edu.cn:8080/reader/ajax_renew.php?bar_code='+ids[int(bookid)-1][0]+'&check='+ids[int(bookid)-1][1]+'&captcha='+str(captcha)+'&time='+str(int(100*mtime))
rtd=opener.open(posturl)
textd=rtd.read().decode('UTF-8')
fd=open('图书馆系统临时文件/xujie.html','w')
fd.write(textd)
fd.close()
pattern4=r'<font color=red>(.+?)</font>'
pattern4=re.compile(pattern4)
textd=pattern4.findall(textd)
print(textd[0])
print('')
else:
print('')
flagg=False
def zhangmu():
f=open('图书馆系统临时文件/zhangmu.html','r',encoding='utf-8')
textz=f.read()
f.close()
pattern=r'总金额:&nbsp;&nbsp;\s*?\t\t\t\t\t(.+?)\s*?\(总金额=缴款-退款-超期免罚\)'
pattern=re.compile(pattern)
textz=pattern.findall(textz)
print(textz[0])
print('(总金额=缴款-退款-超期免罚)')
def query(usr,psw):
flag=True
while flag:
if denglu(usr,psw)==True:
t = os.system('cls')
for x in range(1,17):
for y in range(1,x*5):
print('>',end='')
print('')
time.sleep(0.3)
print('')
print(' 登录完毕! ')
time.sleep(3)
t = os.system('cls')
while flag:
for x in range(1,3):
print('')
print('---------------------------------1:输出基本信息---------------------------------')
print(' ')
print('---------------------------------2:输出到期信息---------------------------------')
print(' ')
print('---------------------------------3:输出历史信息---------------------------------')
print(' ')
print('---------------------------------4:输出当前借阅---------------------------------')
print(' ')
print('---------------------------------5:输出账目清单---------------------------------')
print(' ')
print('-----------------------------------6:退出系统-----------------------------------')
ch=input()
if ch=='1':
text=urllib.request.urlopen('http://wiscom.chd.edu.cn:8080/reader/redr_info.php').read().decode('UTF-8')
f=open('图书馆系统临时文件/jiben.html','w')
f.write(text)
f.close()
key=text
pattern1=r"\">(.+?)</span>(.+?)</TD>"
pattern1=re.compile(pattern1)
text=pattern1.findall(key)
#print(text)
for subtext in text:
print('---',subtext[0],subtext[1],' ')
print('')
if ch=='2':
text=urllib.request.urlopen('http://wiscom.chd.edu.cn:8080/reader/redr_info.php').read().decode('UTF-8')
#f=open('C:/图书馆系统临时文件/jiben.html','wb')
key=text
#print(key)
#f.close()
pattern1=r"\">(.+?)\[<strong style=\"color:#F00;\">(.+?)</strong>"
pattern1=re.compile(pattern1)
text=pattern1.findall(key)
for subtext in text:
print('---',subtext[0],subtext[1],' ')
print('')
#f.write(text)
if ch=='3':
text=urllib.request.urlopen('http://wiscom.chd.edu.cn:8080/reader/book_hist.php?para_string=all').read()
f=open('图书馆系统临时文件/lishi.html','wb')
f.write(text)
f.close()
lishi()
if ch=='4':
text=urllib.request.urlopen('http://wiscom.chd.edu.cn:8080/reader/book_lst.php').read()
f=open('图书馆系统临时文件/dangqian.html','wb')
f.write(text)
f.close()
dangqian()
if ch=='5':
text=urllib.request.urlopen('http://wiscom.chd.edu.cn:8080/reader/account.php').read()
f=open('图书馆系统临时文件/zhangmu.html','wb')
f.write(text)
f.close()
zhangmu()
if ch=='6':
flag=False
input('按回车键继续')
t = os.system('cls')
else:
t = os.system('cls')
usr=input('输入账号:\n')
print('输入密码:')
psw=pwd_input()
print('')
if __name__ == '__main__':
if os.path.exists('图书馆系统临时文件')==False:
os.mkdir(r'图书馆系统临时文件')
t = os.system('cls')
for x in range(1,6):
print('')
print(' 长安大学图书馆查询系统v1.0')
print('')
print('')
print(' ——Developed By CTR')
print('')
print('')
input(' 按回车键进入')
t = os.system('cls')
for x in range(1,6):
print('')
print('输入账号:')
usr=input()
print('输入密码:')
psw=pwd_input()
print('')
query(usr,psw)