Навскидку, делал бы так:
1) нашел бы интересующий элемент (текстовую ноду)
2) обратился бы к его родителю (непосредственному предку)
3) интересующий элемент разделил бы на три: до ключевого слова, ключевое слово и после него.
4) запомнил бы индекс элемента из п. 1) среди потомков родителя из п. 2), удалил его, на его место вставил три потомка из п. 3), при чем средний из них должен быть обернут в span с нужным форматированием.
UPD:
не python, но посмотрите на
этот проект.