При парсинге сайта выдает непонятные символы вместо текста

import json
import requests
from bs4 import BeautifulSoup as b
import telebot
def get_first_anime ():
    headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"}
    url="https://animego.org/anime"
    r=requests.get(url=url, headers=headers)
    soup=b(r.text, "lxml")
    animes=soup.find_all("div", class_="animes-list-item media")
    
    news_dict={}
    
    for article in animes:
        animes_title=article.find("div",class_="h5 font-weight-normal mb-1").text.strip()
        animes_url = article.select_one('a')['href']
        article_id = animes_url.split("-")[-1]    
        #print(f"{anime_title}|{animes_url}")
        news_dict[article_id]={
            "animes_title": animes_title,
            "animes_url": animes_url

        }
    with open("animes_dict.json", "w") as file:
        json.dump(news_dict, file, indent=4, ensure_ascii=False)

def check_animes_update():
    with open("animes_dict.json") as file:
        news_dict = json.load(file)
    headers={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"}
    url="https://animego.org/anime"
    r=requests.get(url=url, headers=headers)
    soup=b(r.text, "lxml")
    animes=soup.find_all("div", class_="animes-list-item media")
    fresh_news={}
    for article in animes:
        animes_url = article.select_one('a')['href']
        article_id = animes_url.split("-")[-1]
        if article_id in news_dict:
            continue
        else:
            animes_title=article.find("div",class_="h5 font-weight-normal mb-1").text.strip()
            

            news_dict[article_id]={
            "animes_title": animes_title,
            "animes_url": animes_url
            }
            
            fresh_news[article_id] ={
                "animes_title": animes_title,
                "animes_url": animes_url 
            }   
    with open("animes_dict.json", "w") as file:
        json.dump(news_dict, file, indent=4, ensure_ascii=False)
    return fresh_news
def main():
    #get_first_anime()
    print(check_animes_update())
if __name__=='__main__':
    main()

вот что выдает, как вместо этих символов получить нормальный текст?

"2184": {
        "animes_title": "���������� ����! ���������",
        "animes_url": "https://animego.org/anime/slushaytes-papu-pokkapoka-2184"
    },

Ответы (1 шт):

Автор решения: Nonen_Hook

Я так понимаю вы записываете данные в файл JSON, поскольку вы не указали кодировку записи русские символы просто записываются некорректно.

Чтобы исправить проблему, читайте и записывайте файл в кодировке UTF-8

Пример записи:

with open("animes_dict.json", "w", encoding="utf-8") as file:
        # Код для записи

Пример чтения:

with open("animes_dict.json", "r", encoding="utf-8") as file:
        # Код для чтения
→ Ссылка