Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 2, 2011 14:46:24

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

lxml + кодировка

Подскажите пожалуйста, как получить читаемый результат в винде.

test.html в ANSI

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Привет</title>
</head>
<body>
hello
</body>
</html>
test.py в utf8
# -*- coding: UTF-8 -*-
import html5lib
import lxml.etree as etree

htmltext = open("test.html")
parser = html5lib.HTMLParser( tree=html5lib.getTreeBuilder("lxml") )
dom = parser.parse(htmltext)
find_a = etree.XPath("/html:html/html:head/html:title", namespaces={"html": "http://www.w3.org/1999/xhtml"})
nodes = find_a(dom)
print len(nodes)
for node in nodes:
print node
print type( node.text )
print node.text.encode('utf-8')
результат на экране:
1
<Element {http://www.w3.org/1999/xhtml}title at 0x28ff8c8>
<type 'unicode'>
&#9500;П&#9500;&#9617;&#9500;и&#9500;в&#9500;е&#9500;&#9619;



Офлайн

#2 Окт. 3, 2011 05:15:17

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

lxml + кодировка

Как-то сложно Вы делаете, попробуйте так:

with open("test.html", "rb") as f:
doc = html5lib.parse(f.read(),
treebuilder="lxml", namespaceHTMLElements=False)

for node in doc.iterfind("/head/title"):
print(node.text)



Офлайн

#3 Окт. 5, 2011 11:52:03

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

lxml + кодировка

спасибо. так конечно короче. Надо будет почитать в чем отличия… такой путь “/head/title” в моем варианте не работал.
Но результат все-равно такой-же
File “test2.py”, line 19, in <module>
print(node.text)
File “C:\Python27\lib\encodings\cp866.py”, line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: ‘charmap’ codec can't encode characters in position 0-5: character maps to <undefined>



Офлайн

#4 Окт. 5, 2011 11:54:27

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

lxml + кодировка

А нет никакой библиотеки пусть медленной, но чтобы работала как декодер лебедева, разве что без угадайки. т.е. задаешь байты + исходную кодировку и ту которую хочешь?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version