Where to get it
Most Linux platforms come with some version of lxml readily packaged, usually named python-lxml for the Python 2.x version and python3-lxml for Python 3.x. If you can use that version, the quickest way to install lxml is to use the system package manager, e.g. apt-get on Debian/Ubuntu:
For MacOS-X, a macport of lxml is available. Try something like
To install a newer version or to install lxml on other systems, see below.
Requirements
You need Python 2.7 or 3.4+.
Unless you are using a static binary distribution (e.g. from a Windows binary installer), lxml requires libxml2 and libxslt to be installed, in particular:
-
version 2.9.2 or later. version 1.1.27 or later.
- We recommend libxslt 1.1.28 or later.
- Простота использования: у нее очень простой синтаксис, чем у любой другой существующей библиотеки.
- Производительность: обработка даже больших XML-файлов занимает меньше времени.
Newer versions generally contain fewer bugs and are therefore recommended. XML Schema support is also still worked on in libxml2, so newer versions will give you better compliance with the W3C spec.
To install the required development packages of these dependencies on Linux systems, use your distribution specific installation tool, e.g. apt-get on Debian/Ubuntu:
For Debian based systems, it should be enough to install the known build dependencies of the provided lxml package, e.g.
Installation
If your system does not provide binary packages or you want to install a newer version, the best way is to get the pip package management tool (or use a virtualenv) and run the following:
If you are not using pip in a virtualenv and want to install lxml globally instead, you have to run the above command as admin, e.g. on Linux:
To install a specific version, either download the distribution manually and let pip install that, or pass the desired version to pip:
To speed up the build in test environments, e.g. on a continuous integration server, disable the C compiler optimisations by setting the CFLAGS environment variable:
(The option reads «minus Oh Zero», i.e. zero optimisations.)
MS Windows
For MS Windows, recent lxml releases feature community donated binary distributions, although you might still want to take a look at the related FAQ entry. If you fail to build lxml on your MS Windows system from the signed and tested sources that we release, consider using the binary builds from PyPI or the unofficial Windows binaries that Christoph Gohlke generously provides.
Linux
On Linux (and most other well-behaved operating systems), pip will manage to build the source distribution as long as libxml2 and libxslt are properly installed, including development packages, i.e. header files, etc. See the requirements section above and use your system package management tool to look for packages like libxml2-dev or libxslt-devel . If the build fails, make sure they are installed.
Alternatively, setting STATIC_DEPS=true will download and build both libraries automatically in their latest version, e.g. STATIC_DEPS=true pip install lxml.
MacOS-X
On MacOS-X, use the following to build the source distribution, and make sure you have a working Internet connection, as this will download libxml2 and libxslt in order to build them:
Building lxml from dev sources
If you want to build lxml from the GitHub repository, you should read how to build lxml from source (or the file doc/build.txt in the source tree). Building from developer sources or from modified distribution sources requires Cython to translate the lxml sources into C code. The source distribution ships with pre-generated C source files, so you do not need Cython installed to build from release sources.
If you have read these instructions and still cannot manage to install lxml, you can check the archives of the mailing list to see if your problem is known or otherwise send a mail to the list.
Using lxml with python-libxml2
If you want to use lxml together with the official libxml2 Python bindings (maybe because one of your dependencies uses it), you must build lxml statically. Otherwise, the two packages will interfere in places where the libxml2 library requires global configuration, which can have any kind of effect from disappearing functionality to crashes in either of the two.
To get a static build, either pass the --static-deps option to the setup.py script, or run pip with the STATIC_DEPS or STATICBUILD environment variable set to true, i.e.
The STATICBUILD environment variable is handled equivalently to the STATIC_DEPS variable, but is used by some other extension packages, too.
Source builds on MS Windows
Most MS Windows systems lack the necessarily tools to build software, starting with a C compiler already. Microsoft leaves it to users to install and configure them, which is usually not trivial and means that distributors cannot rely on these dependencies being available on a given system. In a way, you get what you’ve paid for and make others pay for it.
Due to the additional lack of package management of this platform, it is best to link the library dependencies statically if you decide to build from sources, rather than using a binary installer. For that, lxml can use the binary distribution of libxml2 and libxslt, which it downloads automatically during the static build. It needs both libxml2 and libxslt, as well as iconv and zlib, which are available from the same download site. Further build instructions are in the source build documentation.
Source builds on MacOS-X
If you are not using macports or want to use a more recent lxml release, you have to build it yourself. While the pre-installed system libraries of libxml2 and libxslt are less outdated in recent MacOS-X versions than they used to be, so lxml should work with them out of the box, it is still recommended to use a static build with the most recent library versions.
Библиотека lxml в Python
Библиотека lxml в Python – это наиболее многофункциональная и простая в использовании библиотека для обработки данных XML и HTML. Скрипты в Python написаны для выполнения множества задач, таких как парсинг веб-страниц и анализ XML. В этом уроке мы изучим библиотеку lxml и то, как мы можем использовать ее для синтаксического анализа XML-данных, а также выполнения веб-скрейпинга.
lxml – это действительно хороший API, так как он предоставляет буквально все для обработки этих 2 типов данных. Два основных момента, которые выделяют lxml, – это:
Установка lxml в Python
Мы можем начать использовать lxml, установив его как пакет с помощью инструмента pip в Python:
Когда мы закончим установку этого инструмента, мы можем приступить к простым примерам.
Создание HTML-элементов
С помощью lxml мы также можем создавать элементы HTML. Элементы также могут называться узлами. Создадим базовую структуру HTML-страницы, используя только библиотеку:

Эти HTML-элементы в основном представляют собой список. Мы можем получить доступ к этому списку обычным образом:
И это будет просто печатающая головка, так как это тег, присутствующий прямо внутри тега html. Мы также можем распечатать все элементы внутри корневого тега:

Проверка достоверности HTML-элементов
С помощью функции iselement() мы даже можем проверить, является ли данный элемент допустимым элементом HTML:

Использование атрибутов с элементами HTML
Мы можем добавлять метаданные к каждому конструируемому элементу HTML, добавляя атрибуты к создаваемым элементам:
Когда мы запускаем это, мы видим:

Теперь мы можем получить доступ к этим атрибутам как:

Обратите внимание, что если атрибут не существует для данного элемента HTML, мы получим его как результат None.
Мы также можем установить атрибуты для элемента HTML как:

Подэлементы со значениями
Подэлементы, которые мы построили выше, были пустыми. Давайте создадим несколько подэлементов и поместим в них некоторые значения с помощью библиотеки lxml.
Посмотрим на результат:

Загрузка RAW XML для сериализации
Мы можем предоставить данные RAW XML непосредственно в etree и проанализировать их, так как он полностью понимает, что ему передается.
Давайте посмотрим на результат:

Если вы хотите, чтобы данные включали объявление корневого тега XML, даже это возможно:
Теперь посмотрим на результат:

Функция parse()
Функцию parse() можно использовать для анализа файлов и файловых объектов:
Теперь посмотрим на результат:

Функция fromstring()
Функцию fromstring() можно использовать для анализа строк:
Теперь посмотрим на результат:

Функция XML()
Функцию fromstring() можно использовать для записи XML-литералов непосредственно в источник:
How to install lxml on Windows
I’m trying to install lmxl on my Windows 8.1 laptop with Python 3.4 and failing miserably.
First off, I tried the simple and obvious solution: pip install lxml . However, this didn’t work. Here’s what it said:
So then I looked on this great and helpful thing called The Internet and a lot of people have the same error of needing libxml2 and libxlst . They recommend a guy called Christoph Gohlke’s page where he provides some sort of binary thingy for a bunch of packages. You can find it here (quicklink to the lxml part).
So after I gave up on trying to find libxml2 and libxslt for pip, I decided to go there, and found an absolute ton of downloads. I know I need a 64-bit one, but I have no idea which » cp » I need.
So an answer either giving me a solution on the pip method or the Gohlke index method would be great.
Библиотека lxml в Python
lxml – это библиотека Python, которая позволяет легко обрабатывать файлы XML и HTML, а также может использоваться для очистки веб-страниц. Существует множество стандартных анализаторов XML, но для достижения лучших результатов разработчики иногда предпочитают писать свои собственные анализаторы XML и HTML. Именно тогда в игру вступает библиотека lxml. Ключевые преимущества этой библиотеки заключаются в том, что она проста в использовании, чрезвычайно быстра при синтаксическом анализе больших документов, очень хорошо документирована и обеспечивает легкое преобразование данных в типы данных Python, что упрощает манипуляции с файлами.
В этом руководстве мы глубоко погрузимся в библиотеку lxml Python, начав с того, как настроить ее для различных операционных систем, а затем обсудим ее преимущества и широкий спектр функций, которые она предлагает.
Есть несколько способов установить lxml в вашу систему. Мы рассмотрим некоторые из них ниже.
Использование Pip
Pip – это менеджер пакетов Python, который используется для простой загрузки и установки библиотек в вашу локальную систему, т.е. он также загружает и устанавливает все зависимости для пакета, который вы устанавливаете.
Если в вашей системе установлен pip, просто выполните следующую команду в терминале или командной строке:
apt-get
Если вы используете MacOS или Linux, вы можете установить lxml, выполнив эту команду в своем терминале:
easy_install
Вероятно, вы не дойдете до этой части, но если ни одна из вышеперечисленных команд по какой-то причине у вас не работает, попробуйте использовать easy_install:
Примечание. Если вы хотите установить какую-либо конкретную версию lxml, вы можете просто указать ее при запуске команды в командной строке или в терминале, например, lxml == 3.xy
К настоящему времени у вас должна быть установлена копия библиотеки lxml на вашем локальном компьютере. Давайте теперь посмотрим, какие классные вещи можно делать с помощью этой библиотеки.
Функциональность
Чтобы иметь возможность использовать библиотеку lxml в своей программе, вам сначала необходимо ее импортировать. Вы можете сделать это с помощью следующей команды:
Это позволит импортировать модуль etree, представляющий интерес, из библиотеки lxml.
Создание документов HTML и XML
Используя модуль etree, мы можем создавать элементы XML и HTML и их подэлементы, что очень полезно, если мы пытаемся писать или манипулировать файлом. Попробуем создать базовую структуру HTML-файла с помощью etree:
В приведенном выше коде вам необходимо знать, что для функции Element требуется как минимум один параметр, а для функции SubElement требуется как минимум два. Это связано с тем, что функция Element «требует» только имя создаваемого элемента, тогда как функция SubElement требует создания имени как корневого узла, так и дочернего узла.
Также важно знать, что обе эти функции имеют только нижнюю границу количества аргументов, которые они могут принимать, но не имеют верхней границы, потому что вы можете связать с ними столько атрибутов, сколько захотите. Чтобы добавить атрибут к элементу, просто добавьте дополнительный параметр к функции (Sub) Element и укажите свой атрибут в форме attributeName = ‘attribute value’.
Давайте попробуем запустить код, который мы написали выше, чтобы лучше понять эти функции:
Есть еще один способ создания и организации ваших элементов в иерархическом порядке. Давайте также исследуем это:
Поэтому в этом случае всякий раз, когда мы создаем новый элемент, мы просто добавляем его к корневому или родительскому узлу.
Анализ документов HTML и XML
До сих пор мы рассматривали только создание новых элементов, присвоение им атрибутов и т.д. Давайте теперь рассмотрим пример, в котором у нас уже есть файл HTML или XML, и мы хотим проанализировать его, чтобы извлечь определенную информацию. Предполагая, что у нас есть файл HTML, который мы создали в первом примере, давайте попробуем получить имя тега одного конкретного элемента, а затем распечатать имена тегов всех элементов.
Теперь, чтобы перебрать все дочерние элементы в корневом узле и распечатать их теги:
Работа с атрибутами
Давайте теперь посмотрим, как мы связываем атрибуты с существующими элементами, а также как получить значение определенного атрибута для данного элемента.
Используя тот же корневой элемент, что и раньше, попробуйте следующий код:
Здесь мы видим, что newAttribute = “attributeValue” действительно был добавлен к корневому элементу.
Давайте теперь попробуем получить значения атрибутов, которые мы установили в приведенном выше коде. Здесь мы получаем доступ к дочернему элементу, используя индексирование массива по корневому элементу, а затем используем метод get() для получения атрибута:
Получение текста из элементов
Теперь, когда мы ознакомились с основными функциями модуля etree, давайте попробуем сделать еще несколько интересных вещей с нашими файлами HTML и XML. Почти всегда в этих файлах между тегами есть текст. Итак, давайте посмотрим, как мы можем добавить текст к нашим элементам:
Как проверить, есть ли дочерние элементы?
Далее, есть две очень важные вещи, которые мы должны иметь возможность проверить, поскольку это требуется во многих приложениях для очистки веб-страниц для обработки исключений. Во-первых, мы хотели бы проверить, есть ли у элемента дочерние элементы, а во-вторых, является ли узел элементом.
Сделаем это для узлов, которые мы создали выше:
Приведенный выше код выведет «True», поскольку у корневого узла есть дочерние узлы. Однако, если мы проверим то же самое для дочерних узлов корневого узла, как в приведенном ниже коде, на выходе будет «False».
Теперь давайте сделаем то же самое, чтобы увидеть, является ли каждый из узлов элементом или нет:
Метод iselement полезен для определения, есть ли у вас действительный объект Element, и, следовательно, можете ли вы продолжить его обход, используя методы.
Как проверить, есть ли родительский элемент?
Только что мы показали, как спуститься по иерархии, то есть как проверить, есть ли у элемента дочерние элементы или нет, и теперь в этом разделе мы попытаемся подняться вверх по иерархии, то есть как проверить и получить родительский элемент дочернего узла.
Первая строка не должна возвращать ничего (иначе None), поскольку сам корневой узел не имеет родителя. Два других должны указывать на корневой элемент, то есть на HTML-тег. Давайте проверим вывод, чтобы убедиться, что он соответствует нашим ожиданиям.
Получение братьев и сестер элемента
В этом разделе мы узнаем, как перемещаться в боковом направлении по иерархии, которая извлекает братьев и сестер элемента в дереве.
Боковое перемещение по дереву очень похоже на перемещение по нему по вертикали. Для последнего мы использовали getparent и длину элемента, для первого мы будем использовать функции getnext и getprevious. Давайте попробуем их на ранее созданных узлах, чтобы увидеть, как они работают:
Здесь вы можете видеть, что root [1] .getnext() извлек тег «body», поскольку это был следующий элемент, а root [1] .getprevious() извлек тег «head».
Точно так же, если бы мы использовали функцию getprevious для root, она вернула бы None, а если бы мы использовали функцию getnext для root [2], она также вернула бы None.
Разбор XML из строки
Двигаясь дальше, если у нас есть файл XML или HTML, и мы хотим проанализировать необработанную строку, чтобы получить или обработать требуемую информацию, мы можем сделать это, следуя приведенному ниже примеру:
Как видите, мы успешно изменили текст в HTML-документе. Объявление XML doctype также было автоматически добавлено из-за параметра xml_declaration, который мы передали функции tostring.
Поиск элементов
Последнее, что мы собираемся обсудить, очень удобно при синтаксическом анализе файлов XML и HTML. Мы будем проверять способы, с помощью которых мы можем увидеть, есть ли у элемента какой-либо конкретный тип дочерних элементов, и есть ли у него то, что они содержат.
У этого есть много практических вариантов использования, таких как поиск всех элементов ссылки на определенной веб-странице.
Заключение
В приведенном выше руководстве мы начали с базового введения в то, что такое библиотека lxml и для чего она используется. После этого мы узнали, как установить его в различных средах, таких как Windows, Linux и т.д. Двигаясь дальше, мы исследовали различные функции, которые могут помочь нам перемещаться по дереву HTML и XML как в вертикальном, так и в боковом направлении. В конце мы также обсудили способы поиска элементов в нашем дереве, а также получения информации из них.