Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

lxml xpath returns an empty list

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" class="pc chrome win psc_dir-ltr psc_form-xlarge" dir="ltr" lang="en">
<title>Some Title</title>
</html>

if I run:

from lxml import etree
html = etree.parse('text.txt')
result = html.xpath('//title')
print(result)

I will get an empty list. I guess it has something to do with namespace, but I can't figure it out how to fix it.

like image 841
jhh Phi Avatar asked Oct 18 '22 08:10

jhh Phi


1 Answers

Try creating the tree using the html parser. Also note that if text.txt is a file it will need to be read first.

with open('text.txt', 'r', encoding='utf8') as f:
    text_html = f.read()

like this:

from lxml import etree, html

def build_lxml_tree(_html):
    tree = html.fromstring(_html)
    tree = etree.ElementTree(tree)
    return tree

tree = build_lxml_tree(text_html)
result = tree.xpath('//title')
print(result)
like image 157
James Schinner Avatar answered Oct 21 '22 01:10

James Schinner