Подтвердить что ты не робот

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

Я пытаюсь использовать скребок HTML, как тот, который был представлен здесь. Он отлично подходит для примера, который они предоставили. Однако, когда я пытаюсь использовать его с моей веб-страницей, я получаю эту ошибку - 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)

Спасибо.

4b9b3361

Ответ 1

Короткий ответ: используйте 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 [as r.content].

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

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