Я пытаюсь разобрать некоторый html, и у меня есть некоторые проблемы с этим маленьким html-кодом.Parse html with lxml (tag h3)
XML:
<div>
<p><span><a href="../url"></a></span></p>
<h3 class="header"><a href="../url">Other</a></h3>
<a href="../url">Other</a><br>
<a class="aaaaa" href="../url">Indice</a>
<p></p>
</div>
код:
import urllib
from lxml import etree
import StringIO
resultado=urllib.urlopen('trozo.html')
html = resultado.read()
parser= etree.HTMLParser()
tree=etree.parse(StringIO.StringIO(html),parser)
xpath='/div/h3'
html_filtrado=tree.xpath(xpath)
print html_filtrado
Когда я печатаю код он появляется [], и я полагаю, что он должен быть список с <h3 class="header"><a href="../url">Other</a></h3>
в нем. Если бы у меня был этот список, я бы выполнил etree.tostring (html_filtrado), чтобы увидеть <h3 class="header"><a href="../url">Other</a></h3>
.
Так как же получить этот код?
<h3 class="header"><a href="../url">Other</a></h3>
или только ../url
? который я хочу!
Спасибо
что вы Размещенное ** не ** XML соответствует, ''
без закрывающего тега является незаконным XML, 'lxml' является первым и для большинства в разборе библиотеки XML, чтобы включить сломанный HTML, вам нужно установить несколько флагов в синтаксическом анализаторе. Попробуйте вместо этого использовать парсер HTML или конвертировать HTML в XHTML. –
Но я разбираю много страниц без проблем, с
!! Итак, какие флаги мне нужно использовать? Потому что мне очень нравится этот парсер, это действительно быстро! – dani