У меня есть xml file. скачайте его и сохраните как blog.xml
. Это список моих файлов в Google-blogger, я пишу несколько кодов для его синтаксического анализа, есть что-то, сжимающее lxml.Как обрабатывать кодировку в lxml для правильной обработки html-строки?
code1:
from stripogram import html2text
import feedparser
d = feedparser.parse('blog.xml')
for num,entry in enumerate(d.entries):
string=entry.content[0]['value'].encode("utf-8")
print html2text(string)
Это получить правильный результат с code1.
code2:
import lxml.html
import feedparser
d = feedparser.parse('blog.xml')
for num,entry in enumerate(d.entries):
string=entry.content[0]['value']
myhtml=lxml.html.document_fromstring(string)
print myhtml.text_content()
Это получить неправильный выход с Кодекса2.
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/usr/lib/python2.7/dist-packages/lxml/html/__init__.py", line 532, in document_fromstring
value = etree.fromstring(html, parser, **kw)
File "lxml.etree.pyx", line 2754, in lxml.etree.fromstring (src/lxml/lxml.etree.c:54631)
File "parser.pxi", line 1569, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:82659)
ValueError: Unicode strings with encoding declaration are not supported.
code3:
import lxml.html
import feedparser
d = feedparser.parse('blog.xml')
for num,entry in enumerate(d.entries):
string=entry.content[0]['value'].encode("utf-8")
myhtml=lxml.html.document_fromstring(string)
print myhtml.text_content()
Это получить неправильный выход с code3.
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/usr/lib/python2.7/dist-packages/lxml/html/__init__.py", line 532, in document_fromstring
value = etree.fromstring(html, parser, **kw)
File "lxml.etree.pyx", line 2754, in lxml.etree.fromstring (src/lxml/lxml.etree.c:54631)
File "parser.pxi", line 1578, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:82748)
File "parser.pxi", line 1457, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:81546)
File "parser.pxi", line 965, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:78216)
File "parser.pxi", line 569, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:74472)
File "parser.pxi", line 650, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:75363)
File "parser.pxi", line 599, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:74827)
lxml.etree.XMLSyntaxError: line 1395: Tag b:include invalid
Как обрабатывать кодировку в lxml для правильной обработки html-строки?
Я подозреваю, что * * * анализируют ошибки в записях, но исключение игнорируется lxml в неправильной точке. Обработка исключений Python C-API требует, чтобы код проверял исключения в определенных точках, и если это не было сделано, тогда исключение возникает * позже *, когда возникает другое исключение, которое * обрабатывается правильно. Что произойдет, если вы опустите первый вызов 'test'? Имеет ли он тот же самый «XMLSyntaxError»? –
В любом случае это обязательно должно быть сообщено проекту LXML. –
@Martijn Pieters: да, такая же ошибка возникает, первый вызов 'test' должен был только показать, что сообщение' XMLSyntaxError' изменяется после разбора 'e'. – gatto