Lxml
lxml
2012-12-21
Contents
Contents
2
I lxml
12
1 lxml
13
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Mailing list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Bug tracker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Old Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Why lxml?
16
Motto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Aims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Installing lxml
18
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Building lxml from sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Using lxml with python-libxml2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
MS Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
MacOS-X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4 Benchmarks and Speed
21
General notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
How to read the timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Parsing and Serialising . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
The ElementTree API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Child access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Element creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Merging different sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
deepcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Tree traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
A longer example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
lxml.objectify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
ObjectPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Caching Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Further optimisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5 ElementTree compatibility of lxml.etree
34
2
CONTENTS
CONTENTS
6 lxml FAQ - Frequently Asked Questions
37
General Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Is there a tutorial? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Where can I find more documentation about lxml? . . . . . . . . . . . . . . . . . . . . . . . . . . 37
What standards does lxml implement? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Who uses lxml? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
What is the difference between lxml.etree and lxml.objectify? . . . . . . . . . . . . . . . . . . . 39
How can I make my application run faster? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
What about that trailing text on serialised Elements? . . . . . . . . . . . . . . . . . . . . . . . . 39
How can I find out if an Element is a comment or PI? . . . . . . . . . . . . . . . . . . . . . . . . 40
How can I map an XML tree into a dict of dicts? . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Why does lxml sometimes return 'str' values for text in Python 2? . . . . . . . . . . . . . . . . . 41
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Which version of libxml2 and libxslt should I use or require? . . . . . . . . . . . . . . . . . . . . 41
Where are the binary builds? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Why do I get errors about missing UCS4 symbols when installing lxml? . . . . . . . . . . . . . . 41
Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Why is lxml not written in Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
How can I contribute? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
My application crashes! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
My application crashes on MacOS-X! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
I think I have found a bug in lxml. What should I do? . . . . . . . . . . . . . . . . . . . . . . . . 43
How do I know a bug is really in lxml and not in libxml2? . . . . . . . . . . . . . . . . . . . . . 44
Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Can I use threads to concurrently access the lxml API? . . . . . . . . . . . . . . . . . . . . . . . 44
Does my program run faster if I use threads? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Would my single-threaded program run faster if I turned off threading? . . . . . . . . . . . . . . . 45
Why can't I reuse XSLT stylesheets in other threads? . . . . . . . . . . . . . . . . . . . . . . . . 45
My program crashes when run with mod_python/Pyro/Zope/Plone/... . . . . . . . . . . . . . . . . 45
Parsing and Serialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Why doesn't the pretty_print option reformat my XML output? . . . . . . . . . . . . . . . 47
Why can't lxml parse my XML from unicode strings? . . . . . . . . . . . . . . . . . . . . . . . . 47
What is the difference between str(xslt(doc)) and xslt(doc).write() ? . . . . . . . . . . . . . . . . 47
Why can't I just delete parents or clear the root node in iterparse()? . . . . . . . . . . . . . . . . . 48
How do I output null characters in XML text? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Is lxml vulnerable to XML bombs? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Can lxml parse from file objects opened in unicode/text mode? . . . . . . . . . . . . . . . . . . . 48
XPath and Document Traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
What are the findall() and xpath() methods on Element(Tree)? . . . . . . . . . . . . . . . 48
Why doesn't findall() support full XPath expressions? . . . . . . . . . . . . . . . . . . . . . 49
How can I find out which namespace prefixes are used in a document? . . . . . . . . . . . . . . . 49
How can I specify a default namespace for XPath expressions? . . . . . . . . . . . . . . . . . . . 49
II Developing with lxml
50
7 The lxml.etree Tutorial
51
The Element class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Elements are lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Elements carry attributes as a dict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Elements contain text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Using XPath to find text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Tree iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Serialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
The ElementTree class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3
CONTENTS
CONTENTS
Parsing from strings and files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 The fromstring() function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 The XML() function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 The parse() function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Parser objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Incremental parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Event-driven parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 The E-factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 ElementPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8 APIs specific to lxml.etree
71
lxml.etree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Other Element APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Trees and Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Error handling on exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Error logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Serialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
CDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
XInclude and ElementInclude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
write_c14n on ElementTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
9 Parsing XML and HTML with lxml
79
Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Parser options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Error log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Parsing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Doctype information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
The target parser interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
The feed parser interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
iterparse and iterwalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Selective tag events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Comments and PIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Modifying the tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
iterwalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Python unicode strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Serialising to Unicode strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
10 Validation with lxml
91
Validation at parse time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
RelaxNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
XMLSchema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Schematron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
(Pre-ISO-Schematron) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11 XPath and XSLT with lxml
101
XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
The xpath() method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Namespaces and prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
XPath return values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Generating XPath expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
The XPath class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Regular expressions in XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
The XPathEvaluator classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4
CONTENTS
CONTENTS
ETXPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Error handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 XSLT result objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Stylesheet parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Errors and messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 The xslt() tree method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Dealing with stylesheet complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
12 lxml.objectify
111
The lxml.objectify API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Element access through object attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Creating objectify trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Tree generation with the E-factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Namespace handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Asserting a Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
ObjectPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Python data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Recursive tree dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Recursive string representation of elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
How data types are matched . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Type annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
XML Schema datatype annotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
The DataElement factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Defining additional data classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Advanced element class lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
What is different from lxml.etree? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
13 lxml.html
132
Parsing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Parsing HTML fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Really broken pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
HTML Element Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Running HTML doctests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Creating HTML with the E-factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Viewing your HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Working with links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Form Filling Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Form Submission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Cleaning up HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
autolink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
wordwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
HTML Diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Microformat Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
14 lxml.cssselect
143
The CSSSelector class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
The cssselect method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Supported Selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
15 BeautifulSoup Parser
145
5
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.