De casualidad en algún portal de estos de noticias (no se si newsycombinator u otro) he encontrado el proyecto xj que convierte cualquier html a json.
Me parece muy útil cuando lo conjugas con jq para parsear el html y sacarle algún dato sin tener que tirar de xpath o inventos similares.
Aunque en el este awesomelist en github listan muchas alternativas: https://github.com/dbohdan/structured-text-tools
Después de instalado es bastante sencillo de usar:
$ echo "<html><head><title>prueba 1</title></head><body style='background: red;'><h1>TITULO</h1><p>aaa <b>bbb</b> ccc</p><p>ddd</p></body></html>" | xj | jq '.html[] | select(.body) | .[] | .[] | select(.h1) | .[] | .[0]' -r TITULO