Вы допустили ошибку, доверяя набору символов содержимого HTTP, установленному сервером, используя response.text
.Это дает вам текст Unicode, декодированный из двоичных данных ответа, используя информацию заголовка, что здесь неверно.Затем вы передаете строку Unicode в BeautifulSoup, которая предполагает, что она была правильно декодирована.
Вместо этого используйте атрибут response.content
, который дает вам тело содержимого необработанной двоичной строки:
tmp = s.conent.replace("</td></tr></td></tr><tr><td>", "</td></tr><tr><td>")
Теперь данные остаются в виде двоичной строки, и BeautifulSoup выполнит декодирование за вас,на основе информации в самом документе HTML (там есть тег <meta>
с правильной информацией о кодеке):
>>> import requests, bs4
>>> s = requests.get('http://vstup.info/2017/i2017i483.html')
>>> tmp = s.content.replace("</td></tr></td></tr><tr><td>", "</td></tr><tr><td>")
>>> bs = bs4.BeautifulSoup(tmp, "html.parser")
>>> content = bs.select("div#okrArea table#about tr")
>>> typ = content[1].findAll("td")[1].get_text()
>>> print typ
Технікум (училище)