|
|
@ -19,13 +19,14 @@ def datetime2date_time(dtime,mode): |
|
|
def seconds_from_midnight(t): |
|
|
def seconds_from_midnight(t): |
|
|
return t.hour*60**2+ t.minute*60+t.second |
|
|
return t.hour*60**2+ t.minute*60+t.second |
|
|
class Class: |
|
|
class Class: |
|
|
def __init__(self,title,session,days,location,time_range): |
|
|
|
|
|
|
|
|
def __init__(self,title,session,days,location,time_range,date_range): |
|
|
self.title = title |
|
|
self.title = title |
|
|
self.session = session |
|
|
self.session = session |
|
|
self.days = days |
|
|
self.days = days |
|
|
self.location = location |
|
|
self.location = location |
|
|
self.time_range = time_range |
|
|
self.time_range = time_range |
|
|
self.lab = None |
|
|
self.lab = None |
|
|
|
|
|
self.date_range = date_range |
|
|
# data is a list of two html tables |
|
|
# data is a list of two html tables |
|
|
def scrape(self,data): |
|
|
def scrape(self,data): |
|
|
info,times = data |
|
|
info,times = data |
|
|
@ -71,21 +72,22 @@ class Class: |
|
|
ret = {} |
|
|
ret = {} |
|
|
time_data = dict(zip(headers,data)) |
|
|
time_data = dict(zip(headers,data)) |
|
|
if time_data['time'] == 'TBA': |
|
|
if time_data['time'] == 'TBA': |
|
|
self.time_range = None |
|
|
|
|
|
|
|
|
ret['time_range'] = None |
|
|
else: |
|
|
else: |
|
|
s,e = map(dateparse,time_data['time'].split(' - ')) |
|
|
s,e = map(dateparse,time_data['time'].split(' - ')) |
|
|
self.time_range = ( |
|
|
|
|
|
|
|
|
ret['time_range'] = ( |
|
|
datetime2date_time(s,'time'), |
|
|
datetime2date_time(s,'time'), |
|
|
datetime2date_time(e,'time'), |
|
|
datetime2date_time(e,'time'), |
|
|
) |
|
|
) |
|
|
s,e = map(dateparse,time_data['date range'].split(' - ')) |
|
|
s,e = map(dateparse,time_data['date range'].split(' - ')) |
|
|
self.date_range = ( |
|
|
|
|
|
|
|
|
ret['date_range'] = ( |
|
|
datetime2date_time(s,'date'), |
|
|
datetime2date_time(s,'date'), |
|
|
datetime2date_time(e,'date'), |
|
|
datetime2date_time(e,'date'), |
|
|
) |
|
|
) |
|
|
time_data['days'] = re.sub('[^{}]'.format(''.join(filter(bool,days))),'',time_data['days']) |
|
|
time_data['days'] = re.sub('[^{}]'.format(''.join(filter(bool,days))),'',time_data['days']) |
|
|
self.days = list(days.index(time_data['days'][i]) for i in range(len(time_data['days']))) |
|
|
|
|
|
self.location = time_data['where'] |
|
|
|
|
|
|
|
|
ret['days'] = list(days.index(time_data['days'][i]) for i in range(len(time_data['days']))) |
|
|
|
|
|
ret['location'] = time_data['where'] |
|
|
|
|
|
return ret |
|
|
|
|
|
|
|
|
@property |
|
|
@property |
|
|
def length(self): |
|
|
def length(self): |
|
|
@ -105,4 +107,4 @@ def get_classes(page): |
|
|
if __name__ == "__main__": |
|
|
if __name__ == "__main__": |
|
|
with open('schedule.html') as file: |
|
|
with open('schedule.html') as file: |
|
|
page = BS(file.read(),'lxml') |
|
|
page = BS(file.read(),'lxml') |
|
|
class1,*classes = get_classes(page) |
|
|
|
|
|
|
|
|
class1,*classes = get_classes(page) |