lxml вместо кириллицы выводит (байты?) \xd0 например

382 просмотра
0
0 Комментариев

import requests
from lxml import etree
from io import StringIO, BytesIO
 
def getPage(url):
    return requests.get(url)
 
 
def main():
    parser = etree.HTMLParser(encoding="utf-8")
    resp_obj = getPage("https://freelance.ru/projects/?spec=4&page=1")
    page = resp_obj.content.decode(resp_obj.encoding).encode('utf-8').decode("utf-8")
    tree = etree.parse(StringIO(page), parser)
    root = tree.getroot()
    div_projects = root.xpath("//div[@class='projects']")[0]
    projects = div_projects.xpath('.//div[contains(@class, "public")]')
    for project in projects:
        print(etree.tostring(project,encoding='UTF-8',pretty_print=True, method="html"))
 
main()
input()

А на выводе получаю
«\xd0 \xb0» и т.д. вместо кириллицы

Может кто подскажет, как нормально вывести?


Добавить комментарий

1 Ответы

Python Опубликовано 09.12.2018
0

Пример, кодировка и сайта и вывода считаем utf-8

r = requests.get(url.strip())
html = lxml.html.fromstring(r.text)
title = html.xpath('//title/text()')[0].strip()
content = etree.tounicode(html.get_element_by_id('page_content'))

Рекомендуется использовать tostring, но это зависит от версии lxml на компьютере

Deprecated: use tostring(el, encoding='unicode') instead.

Только через xpath

import requests
import lxml.html
 
url = 'https://freelance.ru/projects/?spec=4&page=1'
r = requests.get(url)
html = lxml.html.fromstring(r.text)
title = html.xpath('//title/text()')[0].strip()
first_topic = html.xpath(".//*[@id='col_center']/div/div[2]/div[1]/div/h2/a/span/text()")

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up