Intereting Posts
как остановить jquery imageslider при наведении мыши Почему внутренний DIV вытекает из внешнего DIV? Как центрировать кнопки в Twitter Bootstrap 3? Почему браузер сходит с ума, когда пишу такие вещи, как ? CSS-псевдоэлемент input-placeholder :: после отображения с или без значения в текстовом поле Как изменить часть URL-адреса iFrame на случайную строку? Почему «childNodes» возвращает число, большее, чем я ожидаю? Почему вертикальная полоса прокрутки перемещается автоматически? фиксированное положение внутреннего div, связанного с его контейнером Javascript Marquee для замены тегов MySql. После нажатия кнопки HTML – таблица базы данных TRUNCATE Как начать новый список, продолжая нумерацию из предыдущего списка? как заставить клавиши со стрелками и пробел не заставлять мою страницу снижаться? Довольно URL без mod_rewrite, без .htaccess Обработка данных формы динамически заполняется из базы данных

Скребок HTML с использованием lxml и запросов дает ошибку в unicode

Я пытаюсь использовать скребок HTML, как показано здесь . Он отлично подходит для примера, который они предоставили. Однако, когда я пытаюсь использовать его с моей веб-страницей , я получаю эту ошибку: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration. Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration. Я пробовал поиск по Google, но не смог найти решение. Я по-настоящему ценю любую помощь. Я хотел бы знать, есть ли способ скопировать его как HTML с помощью Python.

Редактировать:

 from lxml import html import requests page = requests.get('http://cancer.sanger.ac.uk/cosmic/gene/analysis?ln=PTEN&ln1=PTEN&start=130&end=140&coords=bp%3AAA&sn=&ss=&hn=&sh=&id=15#') tree = html.fromstring(page.text) 

Спасибо.

Короткий ответ: используйте page.content , а не page.text .

Из http://lxml.de/parsing.html#python-unicode-strings :

синтаксические анализаторы в lxml.etree могут обрабатывать строки unicode сразу … Это требует, однако, чтобы строки unicode не указывали конфликтующую кодировку и, следовательно, лгали о своей реальной кодировке

От http://docs.python-requests.org/en/latest/user/quickstart/#response-content :

Запросы будут автоматически декодировать контент с сервера [в виде r.text ]. … Вы также можете получить доступ к телу ответа как bytes [как r.content ].

Итак, вы видите, как lxml.etree , так и lxml.etree хотят декодировать utf-8 в unicode. Но если мы разрешим requests.text делать декодирование, то заявление о кодировке внутри xml-файла становится ложью.

Итак, давайте будем иметь requests.content не расшифровывать. Таким образом, lxml получит неизменно незакодированный файл.