Как перекодировать текст сайта в кодировке cp1251 чтобы он был читаемым?
У меня проблема с парсером, решил спарсить текст с сайта, и он приходи в виде: "Ïðåïîäàâàòåëü". Выяснил, что это кодировка windows - 1251 , что бы он стал читаем нужно перекодировать его в windows - 1152. Каким образом это возможно сделать? Пробывал разное но все в пустую. Подскажите начинающему обывателю)
import requests
from bs4 import BeautifulSoup
header = {'user-agent': "pisos"}
link = "https://mgak1.by/assets/site/raspisanie/2.htm" # ссылка на сайт
responce = requests.get(link,headers = header).text
responce.encoding = "windows-1251"
soup = BeautifulSoup(responce, 'lxml')
block = soup.find('body')
second_block = block.find('div', class_="Section1").text
second_block.encode("cp850").force_encoding("windows-1251").encode("utf-8")
file = open("text.txt", 'wt', )
file.write(second_block)
file.close()
Ответы (1 шт):
Не нужно ничего перекодировать вручную. BeautifulSoup сам разберётся с кодировкой, если передать ему всю страницу .content, а не только один текст .text:
responce = requests.get(link,headers = header).content
# ^^^^^^^
# responce.encoding = "windows-1251" <-- это не нужно!
soup = BeautifulSoup(responce, 'lxml')
И дальше у вас всё будет в родной кодировке питона UTF-8, никакие перекодировки не нужны!
# это не нужно!!!
# second_block.encode("cp850").force_encoding("windows-1251").encode("utf-8")
Только если вам нужно в конце записать файл в другой кодировке, тогда укажите её при записи в файл, а так у вас запишется UTF-8, которую прекрасно все современные программы обычно понимают.
Вот что у меня записалось в файл:
1 неделя РАСПИСАНИЕ НА
ЧЕТВЕРГ 16.09.21г.
┌────┬──┬──────────────────────────────────┐
│ │ │ │
│No │No├──────────────┬───┬───────────────┤
│гр. │ур│ Предмет
│Ауд│ Преподаватель │
├────┼──┼──────────────┼───┼───────────────┤
...
P.S. Насколько я понимаю, BS берёт кодировку из заголовка, который там есть:
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
Именно поэтому важно передавать ему content страницы целиком, с заголовками.