def parse_table(table: bs4.NavigableString): result = {} tbodies = table.find_all('tbody') imgs = tbodies[0].find_all('img') tds_number = tbodies[1].find_all('td') for img, td_number in zip(imgs, tds_number): try: unit_type = int(img['class'][1][1:]) except ValueError: unit_type = img['class'][1][1:] number = int(td_number.text.strip()) result[unit_type] = number return result
def from_soup(meeting: NavigableString, session): """Generate a new Meeting instance from BeautifulSoup's objects Args: meeting (NavigableString): The table row representing the meeting session (parliament_parser.ParliamentarySession): The parliamentary session this meeting is a part of. Returns: Meeting: A Meeting object representing this meeting. """ meeting = meeting.find_all('td') meeting_id = int(meeting[0].text.strip()) date = dateparser.parse(meeting[2].text.strip()) tod = TimeOfDay.AM if 'PM' in meeting[1].text: tod = TimeOfDay.PM elif 'Avond' in meeting[1].text: tod = TimeOfDay.EVENING result = Meeting(session, meeting_id, tod, date) return result
def electronic_vote_from_table(meeting_topic, vote_number: int, vote_start_node: NavigableString): """Generate a new electronic (advisory or generic) vote from a parsed table. Args: meeting_topic (MeetingTopic): The meeting topic vote_number (int): Number of the vote in this meeting (e.g. 1) vote_start_node (NavigableString): Vote start node as obtained by BeautifulSoup Returns: Vote: """ yes = int(clean_string(vote_start_node.find_all( 'td')[1].find('p').get_text())) vote_end_node = vote_start_node.find_next_sibling().find_next_sibling() if not vote_end_node or vote_end_node.name != 'table': return ElectronicAdvisoryVote(meeting_topic, vote_number, yes) no = int(clean_string(vote_end_node.find_all( 'td')[1].find('p').get_text())) return ElectronicGenericVote(meeting_topic, vote_number, yes, no)