def parse_season(season): content = urlopen(season.url).read() ctx = libxml2.htmlParseDoc(content, "UTF-8") gamedays = ctx.xpathEval("//div[@class='data']/table[@class='standard_tabelle']/tr") day = None while gamedays: g = gamedays.pop(0) cls = g.get_children().prop("class") if cls == "ueberschrift": if "Spieltag" in g.content: number = int(g.content.strip().split(".", 1)[0]) day = GameDay.from_data(season, number) if day is not None: cols = g.xpathEval("td") if len(cols) == 7: team_home = cols[1].get_children() team_guest = cols[3].get_children() team_home = Team( {"caption": team_home.prop("title"), "url": team_home.prop("href")} ).url team_guest = Team( {"caption": team_guest.prop("title"), "url": team_guest.prop("href")} ).url result = Result({ "url": cols[4].xpathEval("a")[0].prop("href"), "result": parse_result(cols[4].content.strip()) }) Match({ "url": result.url, "gameday": day.url, "home": team_home, "guest": team_guest, "result": result.result }) return season