Перекодировка HTML кода Вк

Рейтинг: 0Ответов: 1Опубликовано: 18.07.2023

Пишу парсер для Вк, и при попытке запросить ссылки из html кода, # и кирилица превращаются в не понятно что, код:

from bs4 import BeautifulSoup as bs
import requests
cookies = {
    'remixlang': '0',
    'remixstlid': '9114125220013750812_aTn2Nkcphe6jkNZj2K0NGeLGzX3HMj6ChxrgiVP0I9L',
    'remixstid': '2045050744_ASY23jd4ySNzAv4xNzznI8KWzN6nkit05Q1wjtrXRHX',
    'remixlgck': 'ca47b80eafa9464aff',
    'remixnp': '0',
    'remixscreen_width': '1280',
    'remixscreen_height': '720',
    'remixscreen_dpr': '1.5',
    'remixscreen_depth': '24',
    'remixscreen_orient': '1',
    'remixscreen_winzoom': '1',
    'remixdark_color_scheme': '0',
    'remixcolor_scheme_mode': 'auto',
    'remixdt': '0',
    'remixgp': '652e970b2a0df97ffa6d8e93953288fd',
    'tmr_lvid': 'c4ef93d30160b51aa4c9b6d03b3eb5b4',
    'tmr_lvidTS': '1689662816524',
    'remixua': '41%7C-1%7C195%7C1384047604',
    'remixuas': 'YjNmYThlMjM3ODQzZTkzMDlkNDM0MTYw',
    'tmr_detect': '0%7C1689662845929',
}

headers = {
    'authority': 'vk.com',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'ru-RU,ru;q=0.9',
    'cache-control': 'max-age=0',
    # 'cookie': 'remixlang=0; remixstlid=9114125220013750812_aTn2Nkcphe6jkNZj2K0NGeLGzX3HMj6ChxrgiVP0I9L; remixstid=2045050744_ASY23jd4ySNzAv4xNzznI8KWzN6nkit05Q1wjtrXRHX; remixlgck=ca47b80eafa9464aff; remixnp=0; remixscreen_width=1280; remixscreen_height=720; remixscreen_dpr=1.5; remixscreen_depth=24; remixscreen_orient=1; remixscreen_winzoom=1; remixdark_color_scheme=0; remixcolor_scheme_mode=auto; remixdt=0; remixgp=652e970b2a0df97ffa6d8e93953288fd; tmr_lvid=c4ef93d30160b51aa4c9b6d03b3eb5b4; tmr_lvidTS=1689662816524; remixua=41%7C-1%7C195%7C1384047604; remixuas=YjNmYThlMjM3ODQzZTkzMDlkNDM0MTYw; tmr_detect=0%7C1689662845929',
    'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}

my_link = []

base_url = "https://vk.com/genshinmania"

vk = requests.get(base_url,cookies=cookies,headers=headers)
print(vk.status_code)
soup = bs(vk.content, 'lxml')
link = soup.find_all('div', class_="groups_menu_item_image")

for item in link:
    url = item.get('href')
    my_link.append(url)

print(my_link)

ссылка которая получается на выходе:https://vk.com/wall-206909896?q=%23РїСЂРѕРјРѕРєРѕРґС‹ ссылка которая должна выйти: https://vk.com/wall-206909896?q=%23%D0%BF%D1%80%D0%BE%D0%BC%D0%BE%D0%BA%D0%BE%D0%B4%D1%8B или https://vk.com/wall-206909896?q=%23промокоды

Ответы

▲ 0

Если зайти на страницу через браузер и поискать конкретно ту проблемную ссылку, то она тоже там будет отображаться криво, т.е. проблема в самих отдаваемых сервером данных.

Скорее всего, там просто намешаны кодировки: одна часть страницы, как и предполагается, в windows-1251, а другая была закодирована кодировкой UTF-8.

Как вариант, можно перекодировать текст и декодировать его в нормальную кодировку

my_link.append(url.encode("windows-1251").decode("utf-8"))

и тогда ссылки отображаются нормально.