У вас в парсере не учтена целая лагуна подводных камней. Я на семинаре показывал пример отказоустойчивого парсера на ~5-10 строк.