def _parse_start(self, item, month_counter):
    '\n        Parse start date and time.\n\n        Accepts month_counter as an argument from top level parse function to iterate through all months in the year.\n        '

    def parse_day(source):
        'Parses the source material and retrieves the day of the week that the meeting occurs.\n            '
        day_source = source[0]
        day_regex = re.compile('[a-zA-Z]+day')
        mo = day_regex.search(day_source)
        return mo.group().lower()

    def parse_time(source):
        'Parses the source material and retrieves the time that the meeting occurs.\n            '
        time_source = source[1]
        time_regex = re.compile('(1[012]|[1-9]):[0-5][0-9](am|pm)')
        mo = time_regex.search(time_source)
        return mo.group()

    def count_days(day, week_count):
        'Because the source material provides meeting dates on a reoccuring schedule, we must use the parsed day\n            from the parse_day function and the '
        today = datetime.today()
        week_day = {'monday': 0, 'tuesday': 1, 'wednesday': 2, 'thursday': 3, 'friday': 4, 'saturday': 5, 'sunday': 6}
        week_counter = 0
        for x in range(1, 31):
            try:
                current_date = datetime(today.year, month_counter, x)
                if (current_date.weekday() == week_day[day]):
                    week_counter += 1
                    if (week_counter == int(week_count)):
                        return current_date
            except ValueError as e:
                break

    def concat_date(meeting_date, time):
        'Combines the meeting date with the time the meeting occurs. Function return a datetime\n            object.\n            '
        return dateparse(((((((str(meeting_date.year) + '-') + str(meeting_date.month)) + '-') + str(meeting_date.day)) + ' ') + time))

    def get_start(source):
        'Combines above defined parse_day, parse_time, count_days, and concat_date functions to get the start\n             date from the source. If a start time cannot be found the UNIX epoch date is returned.\n             '
        day = parse_day(source)
        week_count = source[0].strip()[0]
        if week_count.isdigit():
            time = parse_time(source)
            meeting_date = count_days(day, week_count)
            start = concat_date(meeting_date, time)
        else:
            pass
        return start
    source = item.css('li::text').extract()
    return get_start(source)
Parse start date and time.

Accepts month_counter as an argument from top level parse function to iterate through all months in the year.
def _parse_start(self, item, month_counter):
    '\n        Parse start date and time.\n\n        Accepts month_counter as an argument from top level parse function to iterate through all months in the year.\n        '

    def parse_day(source):
        'Parses the source material and retrieves the day of the week that the meeting occurs.\n            '
        day_source = source[0]
        day_regex = re.compile('[a-zA-Z]+day')
        mo = day_regex.search(day_source)
        return mo.group().lower()

    def parse_time(source):
        'Parses the source material and retrieves the time that the meeting occurs.\n            '
        time_source = source[1]
        time_regex = re.compile('(1[012]|[1-9]):[0-5][0-9](am|pm)')
        mo = time_regex.search(time_source)
        return mo.group()

    def count_days(day, week_count):
        'Because the source material provides meeting dates on a reoccuring schedule, we must use the parsed day\n            from the parse_day function and the '
        today = datetime.today()
        week_day = {'monday': 0, 'tuesday': 1, 'wednesday': 2, 'thursday': 3, 'friday': 4, 'saturday': 5, 'sunday': 6}
        week_counter = 0
        for x in range(1, 31):
            try:
                current_date = datetime(today.year, month_counter, x)
                if (current_date.weekday() == week_day[day]):
                    week_counter += 1
                    if (week_counter == int(week_count)):
                        return current_date
            except ValueError as e:
                break

    def concat_date(meeting_date, time):
        'Combines the meeting date with the time the meeting occurs. Function return a datetime\n            object.\n            '
        return dateparse(((((((str(meeting_date.year) + '-') + str(meeting_date.month)) + '-') + str(meeting_date.day)) + ' ') + time))

    def get_start(source):
        'Combines above defined parse_day, parse_time, count_days, and concat_date functions to get the start\n             date from the source. If a start time cannot be found the UNIX epoch date is returned.\n             '
        day = parse_day(source)
        week_count = source[0].strip()[0]
        if week_count.isdigit():
            time = parse_time(source)
            meeting_date = count_days(day, week_count)
            start = concat_date(meeting_date, time)
        else:
            pass
        return start
    source = item.css('li::text').extract()
    return get_start(source)