Использование requests и кодировка полученной страницы — как исправить проблемы с русскими символами?

Уважаемые друзья.
Простейшая программа на Python 3.3.5 под Win7 x64
Если парсить lenta.ru то все работает как нужно: анкоры показываются русскими буквами.
Но вот если запустить тоже самое на da.ru то все русские анкоры получаются кракозяблами.
Подскажите, как нужно ее исправить, чтобы во всех случаях русские символы были нормальными?

import requests
from lxml import html

r = requests.get('http://lenta.ru')
#r = requests.get('http://da.ru')
docHtml = r.text
parsed_body = html.fromstring(docHtml)
for y in parsed_body.xpath("//a"):
    url=y.get("href")
    anchor=y.text
    print(url,anchor)
  • Вопрос задан
  • 13118 просмотров
Пригласить эксперта
Ответы на вопрос 4
Tark
@Tark
Pyramid'альный мир
Если сделать
r = requests.get('http://da.ru')
print r.encoding

то окажется, что кодировка там брутальная ISO-8859-1

for y in parsed_body.xpath("//a"):
    url = y.get("href")
    anchor = y.text
    if anchor:
        print url, anchor.encode(r.encoding)

Так всё нормально. Правда, у меня Python 2.7.3
Ответ написан
Комментировать
@theromis
у мня та же самая проблема, помогло насильно выставить кодировку ответа `request.get`

```
r = requests.get(link, timeout=60, verify=False, headers=headers)
r.encoding = 'utf-8'
print r.text # стал чистым
```
Ответ написан
Комментировать
q1t
@q1t
может проблема с юникодом?
encoded = str.encode(original, 'utf-8')
print(encoded)
Ответ написан
Комментировать
@wanomgn Автор вопроса
кракозяблы выглядят так: пÑоÑоÑипиÑование ÑайÑа
если сделать encoded = str.encode(original, 'utf-8') то получаем:
b'\xc3\x90\xc2\xbf\xc3\x91\xc2\x80\xc3\x90\xc2\xbe\xc3\x91\xc2\x82\xc3\x90\xc2\xbe\xc3\x91\xc2\x82\xc3\x90\xc2\xb8\xc3\x90\xc2\xbf\xc3\x90\xc2\xb8\xc3\x91\xc2\x80\xc3\x90\xc2\xbe\xc3\x90\xc2\xb2\xc3\x90\xc2\xb0\xc3\x90\xc2\xbd\xc3\x90\xc2\xb8\xc3\x90\xc2\xb5 \xc3\x91\xc2\x81\xc3\x90\xc2\xb0\xc3\x90\xc2\xb9\xc3\x91\xc2\x82\xc3\x90\xc2\xb0'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы