
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 Ответы


Пример, кодировка и сайта и вывода считаем 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()")