闲来无事,就想试试通过爬取完美校园的数据,来获得每个寝室的电费,不多说,代码如下
import time
import requests
from bs4 import BeautifulSoup
class Test:
def init(self, school, build, floor, room):
self.school = school
self.build = build
self.floor = floor
self.room = room + ' '
def getSchool(self):
School_list = [{'num': '本部校区', 'sysid': '1'}, {'num': '应科院', 'sysid': '2'},
{'num': '西校区', 'sysid': '3'},
{'num': '三江校区', 'sysid': '4'}, {'num': '红旗校区家属区', 'sysid': '5'}]
for i in range(0, 5):
content = School_list[i]
if (self.school == content['num']):
return content['sysid']
def getBuild(self):
content = self.getSchool() # 接受返回的sysid
url = 'https://ecard.jxust.edu.cn/epay/wxpage/wanxiao/getbuild.json?sysid={}&areaid=1&districtid=1'.format(
content)
response = requests.post(url=url)
Pillar_data = response.json()
return Pillar_data['list']
def getbuildId(self):
content = self.getBuild() # 接受查询到的宿舍栋数的列表
global a
a = 0
for i in range(0, len(content)):
content1 = content[i]
if ('应科院' + str(self.build) + '栋' + 'new' == content1['buiName']): # 判断楼栋号是否有误
a = 1
return content1['buiId'] # 返回楼栋数所对应的buiId值
if (a == 0):
print('栋数输入有误,请检查')
return 0
def getFloor(self):
if (self.floor < 8 and self.floor > 0): # 判断楼层是否小于8
global Floor_data
content2 = self.getbuildId()
if (content2 != 0):
url = 'https://ecard.jxust.edu.cn/epay/wxpage/wanxiao/getroom.json?sysid=2&areaid=1&districtid=1&buildid={}&floorid={}'.format(
content2, self.floor)
response = requests.post(url=url)
Floor_data = response.json()
return Floor_data['list']
else:
return 0
else:
print('楼层大于8,请检查 ')
return 0
def getRoom(self):
content = self.getFloor()
if (content != 0):
for i in range(0, len(content)):
content1 = content[i]
if self.room == content1['roomName']:
return content1['roomId']
else:
print('')
return 0
def getMoney(self):
content = self.getRoom()
if (content != 0):
url = 'http://ecard.jxust.edu.cn/epay/wxpage/wanxiao/eleresult?sysid=2&roomid={}&areaid=1&buildid={}'.format(
content,
self.getbuildId())
headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Wanxiao/5.7.0 CCBSDK/2.4.0'
} # pc端无效,使用手机端的标识
response = requests.post(url=url, headers=headers, )
page_text = response.text
soup = BeautifulSoup(page_text, 'html.parser')
content = soup.find('input', id='roomdef')[
'left-degree'] # 找到id=roomdef的input标签,并且取出left-degree所对应的属性值,返回的是str类型
Floatmoney = float(content) # 此时money是十位浮点类型,
print('剩余电量' + ('{:.2f}'.format(Floatmoney))) # 使用format函数保留两位小数
else:
print('')
return