用python编写图书管理系统,基于python的图书管理系统设计与实现
前言:判断如何阅读网页分析数据分析js请求分析http请求分析json数据创建Python脚本分析导入所需库发送get请求jsonsmtp发送邮件云服务器运行设置crontab在linux上
序
最近想去图书馆借书,但是图书馆的两本书都被借走了。其中一本书应该在3月3日到期归还,所以我认为那个人这几天会来图书馆还书,所以我写了一个python脚本放在服务器上。我会每小时查看一次,人还完书会给我发短信。这样你就可以马上借书了。哈哈。
使用的工具:
谷歌浏览器;Python3.8,云linux服务器
所需知识:
开发者工具http get请求的基本使用;乔恩加工;发送smtp邮件;使用linux服务器crontab
分析网页以确定如何加载数据。
找到要分析的网页,打开浏览器的开发工具并更新它。
这是我学校图书馆的网站。是图书馆的图书查询。
上图是我要调查的书(《tensorflow从零开始学》),第二张是书的现存状态。
因为有一页,我开始分析这些信息是怎么来的。
好在书的现有状态是用AJAX通过网页获取的json加载信息。下面的标题显示了我是如何查找数据的。分析json信息可以得到必要的数据。(因为数据加载较晚,可以先下载网页确认是否有信息。如果没有,后来被js获得。)
如果服务器直接返回的页面包含了直接需要的数据,那就麻烦了。虽然需要解析html页面,但是非常简单。以前java的jsoup工具是用来解析html的,但是Python应该也有处理html的库。初学者对Python不熟悉。
进入正题
js获取的内容可以在谷歌Chrome和select XHR的开发者面板中找到。如下图所示
该列表显示了该页面上的所有js请求。
Js请求无聊搜索(请耐心等待。这是最费时间的地方)),我终于找到了一个要求。里面有json的资料。在下面
可以看到第四个js请求返回了json数据。Json数据包含必要的信息。
分析http请求并切换到header选项,如下图所示
可以看到请求模式是Get request,参数如下图所示。
一看就知道bookrecnos是请求的id。如果您想要调查哪个号码,请添加号码id参数。
然后返回json格式的数据。我把json数据复制到csdn的json分析工具(json分析工具什么的)。我只是为了方便查看json信息,使用了CSDN插件的json工具。好用。)
左边是原始数据,右边是json工具正在处理的数据。你开心吗?
分析json数据后,可以看到key在预览上有图书信息。要搜索的数量id是1901457577。
如果你在找一个id,用我的方法。用小箭头点击图片。图片有bookrecno属性。值将为我们调查这些数字的id。在下面
1901457577有多组信息。因为我们学校有多个校区,所以我会给出多个校区的调查结果。只有青岛校区的数据。数据如下。
1901445771 : { 图书编号:1901445771,图书编号: TP183/147 , curlib: 01000 , curlid loanableCount: 0, shelfno :空,条形码 3360
LoanableCount是剩余图书的库存。
现在您已经知道了json的数据存储位置,开始编写python脚本。
编写Python脚本
我自学的第一门语言是java。其实java也可以,但是由于我在深入学习,所以从现在开始主要学习python。所以,下一次,我会尝试用python工具写脚本。
已导入所需的库importrequestsimportjsonimportspribimportdatetimefrommail . mime . textimportmimextfrommail . headerimporthorth
获取查询请求的数量id=[1901457577]#可以是多个数字。book #参数params是一个字典类型,“bookrecnos”是一个查询。
编号id,如果要查询多个编号,用逗号分隔(这里只查询一本书)params={bookrecnos: ID, return _ fmt : JSON } response=requests . get( 3358 interlib . sdust . edu . cn/OPAC/book/hold previews
解析json使用json.loads()方法返回一个字典,
将JSON解码为Python类型转换对应表:
JSON=JSON . loads(response . text)# Previews是字典,关键是id preview=JSON[ Previews ]# id为1901457577 book_info=preview[id[0]]#从book _ info列表中选择包含“青岛校区”的字典书。对于book _ info中的I:school=I[ cur libname ]If school==青岛校区:book=i break #如果找到青岛校区,直接跳出循环。count=book[copycount]#有多少本书?remain count=book[ loanablecount ]#剩余的书籍由smtp发送。我用163邮箱发的。
需要在163邮箱申请一个授权码,获取授权码的途径可以是百度,这里不做描述。
#如果有书,发邮件通知我如果count 0且remain count==0: message=现有{1}本书,共{2}本。当前时间:{3}”。format (ID [0],remain count,count,datetime . datetime . now())print(message)# mail _ host= SMTP . 163 . com # setting server mail _ user= xxxxxxxx @ 163 . com # username,您要使用什么电子邮件地址发送消息mail _ pass= xxxxxxxxxxx # pass,电子邮件授权码sender= xxxxxxxx @ 163 . com receivers=[ xxxxxxxx @ qq . com ]#要接收电子邮件,可以设置为您的QQ邮箱或Mess=mimetext (message, plain , UTF-8) subject=图书查询结果 mess[Subject]=Header(subject, utf-8 )mess[ From ]=sender mess[ To ]=receivers[0]SMTP=SMTP lib。SMTP_SSL(mail_host,994) try: smtp.login(mail_user,mail_pass) smtp.sendmail(sender,receivers,Mess.as_string()) print(邮件发送成功)exception as e: print(错误:无法发送邮件)print(e)finally:SMTP . close else:print(没有书了)print(程序执行完成.)注意:
而从到必须这样写:
Mess [from]=发件人mess [to]=收件人[0]否则会被163判定为垃圾邮件,无法发送。
使用SMTP_SSL
Smtp=smtplib . SMTP _ SSL(mail _ host,994)其实我写的是SMTP=SMTP lib。SMTP(邮件主机,25)
Windows写的时候可以用,我放到服务器上就不能用了。可能是服务器端口的问题。使用SMTP_SSL()可以做到万无一失。
这是我写的脚本文件,可以下载。
bookSearch.py
云服务器运营
上传。py文件到服务器
在linux中设置crontab计划任务使用crontab -e编辑计划任务。
可以使用
*/10 8-22 * * * Python 3/data/Python _ proj/library/book search . py我设置为8: 00到22: 00,每10分钟发出一次查询。
关于crontab的具体使用,请参考本文:如何使用Linux crontab命令。
然后重新启动crontab服务。
综上所述,你可以在网上查询其他信息。使用方法很简单,但是很实用。留言说我说的不清楚,我一定会回复。
这应该是有史以来最长最严肃的一篇文章了。如果还可以,可以喜欢,可以支持。如果你觉得不好,可以在评论区留言。谢谢你的支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。