Sla html.parser uit de standaard library van Python niet over. Die is heel basaal maar mogelijk geschikt voor wat je doet.
Je maakt een subclass aan van html.parser.HTMLParser, en definieert methods voor het afhandelen van start- en eindtags (waarbij een xml-stijl <tag/> als start+eindtag wordt afgehandeld, tenzij je een override van nog een method doet) en voor data. Omdat de HTML sequentieel wordt afgehandeld: starttag->childtags->endtag, is de structuur uit de aanroepvolgorde te halen. Je kan bijvoorbeeld een lijst bijhouden en in elke aanroep van handle_starttag() daar een element aan toevoegen, en het bij de aanroep van handle_endtag() het weer uit de lijst verwijderen. Zo'n element kan naast de naam van de tag en attributen (die worden in de aanroep doorgegeven) een lijst met rechtstreekse children bevatten, die je in handle_starttag() toevoegt aan het element dat de parent vertegenwoordigt, om het eindresultaat in handle_endtag() te verwerken. Of wat je maar nodig hebt.
Het kan een nadeel zijn dat je low-level alles zelf moet opbouwen, terwijl bijvoorbeeld BeautifulSoup dat allemaal voor je doet, maar het kan ook een voordeel zijn omdat je maatwerk opbouwt voor wat jouw toepassing nodig heeft, zeker als dat niet een volledige weergave van de HTML moet zijn maar slechts een uittreksel eruit. Dan kan een volledige weergave van de HTML veel ruis bevatten, en sluiten de objecten voor HTML-elementen zoals BeautifulSoup die produceert wellicht helemaal niet aan bij wat jij nodig hebt. Het hangt dus helemaal af van wat je toepassing eigenlijk precies moet doen. En wat ik in de vorige alinea beschreef is niet moeilijk, probeer het gewoon eens om er gevoel voor te krijgen.
Er bestaat een heel algemene neiging om te denken dat rijke, alomvattende libraries en tools meer te bieden hebben dan heel basale, waarvan maar al te vaak gedacht wordt dat die moeilijk zijn, want low-level. Ik heb vaker dan me lief is ondervonden dat die rijke, alomvattende tools helemaal niet zo geschikt bleken te zijn voor het doel waarvoor ze werden ingezet en juist een blok aan het been gingen vormen omdat je als ontwikkelaar voortdurend om aannames heen zat te werken die zo'n tool deed maar die voor jouw toepassing niet opgingen. Dan kunnen juist de basale tegenhangers veel flexibeler en praktischer blijken te zijn. Dat geldt zeker niet voor alle geavanceerde libraries en voor alle toepassingen, dus kan ik onmogelijk weten hoe dat voor jouw toepassing uitpakt, daar zal je zelf achter moeten komen.
Sluit het niet bij voorbaat uit, wil ik maar zeggen, het zou kunnen blijken dat je juist met een basale tool als html.parser op een verrassend eenvoudige manier precies de gegevens kan verzamelen die je nodig hebt in een vorm waar je wat mee kan.