Cleaning HTMLs to extract text
Since you have basically the same statements over and over with different parameters, this can be turned into a loop. You can pair the pattern and the string you want to use to replace in a dict. This makes it clear what is paired with what. Take a look:

import re

def strip_html(raw_html: str) -&gt; str:
    pairs = {
        '&lt;.*?&gt;': ' ',
        '&amp;amp;': '&amp;',
        '\n': ' ',
        '&amp;nbsp;': ' ',
        '&amp;#8217;': '\'',
        '&amp;#8230;': '...',
        '&amp;#8216;': '\'',
        '&amp;#8221;': '\'',
        '&amp;#8220;': '\'',
        '&amp;#8211;': '\'',
        '&amp;#8212;': '\'',
        '&amp;#38;': '&amp;',
        '&amp;#2026;': '...',
        '&amp;#160;': ' ',
        '&amp;#038;': '&amp;'
    }
    previous = raw_html
    for pattern in pairs:
        clean_text = re.sub(re.compile(pattern), pairs[pattern], previous)
        previous = clean_text
    return clean_text.strip()