«Pyquery» – это сторонний модуль Python, который позволяет анализировать и извлекать данные из документов «xml» и «html». Он вдохновлен библиотекой jQuery JavaScript и имеет почти идентичный синтаксис, что позволяет использовать множество вспомогательных функций и сокращенный код для анализа и управления деревом документа. В этой статье будет представлено простое руководство по Pyquery, которое поможет вам начать работу с модулем.
Установка Pyquery
Чтобы установить Pyquery в Ubuntu, используйте команду, указанную ниже:
$ sudo apt install python3-pyquery
Вы также можете установить последнюю версию Pyquery из диспетчера пакетов «pip», последовательно выполнив следующие две команды:
$ sudo apt install python3-pip $ pip3 install pyquery
Чтобы установить Pyquery в других дистрибутивах Linux, установите «pip3» из диспетчера пакетов и выполните вторую команду, упомянутую выше.
Создание дерева документов, доступного для анализа
Прежде чем вы сможете анализировать и извлекать данные из HTML-документа, вам необходимо создать дерево документа. Вы можете создать дерево документов из простой разметки HTML, используя приведенный ниже пример кода:
from pyquery import PyQuery as pq document = pq("Привет Мир !!</html>") print (document) print (type(document))
Первый оператор импортирует класс «PyQuery» из модуля «pyquery». Затем создается новый экземпляр класса PyQuery. После выполнения приведенного выше примера кода вы должны получить следующий результат:
<html>Привет Мир !!</html> <class 'pyquery.pyquery.PyQuery'>
Обратите внимание на вторую строку вывода. Здесь «документ», который является экземпляром класса «PyQuery», не возвращает объект строкового типа. Вы можете быстро запросить все методы, доступные для экземпляра «документа», добавив следующую дополнительную строку в приведенный выше пример кода:
from pyquery import PyQuery as pq document = pq("<html>Привет Мир !!</html>") print (help(document))
Вы также можете просмотреть API для класса PyQuery в Интернете.
Чтобы создать дерево документов из URL-адреса, используйте вместо него следующий код (замените «url» своим желаемым адресом):
from pyquery import PyQuery as pq document = pq(url='https://example.ru') print (document)
Чтобы создать дерево документов из локального HTML-файла, используйте приведенный ниже код (замените значение «filename» в соответствии с вашими потребностями):
from pyquery import PyQuery as pq document = pq(filename='index.html') print (document)
Теперь, когда у вас есть дерево документов, вы можете приступить к его синтаксическому анализу.
Управление деревом документа
Вы можете извлекать данные и управлять деревьями документов, используя множество методов. Некоторые из наиболее распространенных методов перечислены ниже с примерами. Чтобы узнать обо всех доступных методах, обратитесь к API, доступному здесь.
Вы можете использовать «текстовый» метод для получения текстового содержимого элемента:
from pyquery import PyQuery as pq document = pq('''<html><p id="hw">Привет Мир !!</p></html>''') p = document('p') print (p.text())
Вы можете выбрать конкретный тег/элемент, указав его имя в качестве аргумента для экземпляра «документа». После выполнения приведенного выше примера кода вы должны получить следующий результат: Привет мир !! Вы можете получить атрибуты тега с помощью метода attr. Для этого выберите тег, который вы хотите проанализировать (в данном случае «p»), и укажите имя атрибута в качестве аргумента (в данном случае «id») или используйте точечную нотацию.
from pyquery import PyQuery as pq document = pq('''<html><p id="hw">Привет Мир !!</p></html>''') p = document('p') print (document) print (p.attr("id"), p.attr.id)
После выполнения приведенного выше примера кода вы должны получить следующий результат:
<p id="hw">Привет мир !!</p>
Вы можете манипулировать CSS с помощью метода «css». Чтобы добавить стили CSS или любой другой тег, вы можете использовать следующий код:
from pyquery import PyQuery as pq document = pq('''<html><p id="hw">Привет Мир !!</p></html>''') p = document('p') p.css({"color": "red"}) print (document) print (p.attr("style"))
Замените часть «{« color »:« red »}» своими собственными стилями. После выполнения приведенного выше примера кода вы должны получить следующий результат и убедиться, что CSS применен правильно:
<p id="hw" style="color: red">Привет Мир !!</p> color: red
Если у вас есть класс с предварительно заданным стилем, вы можете просто использовать метод «addClass» для применения существующих стилей.
from pyquery import PyQuery as pq document = pq('''<html><p id="hw">Привет Мир !!</p></html>''') p = document('p') p.addClass("mystyle")
Вы можете добавить и добавить свою собственную разметку, используя приведенный ниже пример кода:
from pyquery import PyQuery as pq document = pq('''<p id="hw">Привет Мир !!</p>''') p = document('p') p.prepend("<p>Хай</p>") p.append("<p>Пока</p>") print (document)
Замените аргументы в методах prepend и append своими собственными значениями. После выполнения приведенного выше примера кода вы должны получить следующий результат:
<p id="hw"><p>Хай</p>Привет Мир !!<p>Пока</p></p>
Чтобы удалить содержимое элемента, используйте «пустой» метод.
from pyquery import PyQuery as pq document = pq('''<p id="hw">Привет Мир !!</p>''') p = document('p') p.empty() print (document)
После выполнения приведенного выше примера кода вы должны получить следующий результат:
<html><p id="hw" /></html>
Вы можете использовать метод «фильтра» для выбора определенных элементов, когда имеется несколько тегов одного и того же типа. Например, приведенный ниже код выбирает тег «<p>», имеющий «id» как «hello»:
from pyquery import PyQuery as pq document = pq('''<p id="hello">Привет</p><p id="world">Мир !!</p>''') p = document('p') print (p.filter("#hello"))
После выполнения приведенного выше примера кода вы должны получить следующий результат:
<p id="hello">Привет</p>
Вы можете найти сразу несколько тегов/элементов, используя метод «find»:
from pyquery import PyQuery as pq document = pq('''<p id="hello">Привет</p><p id="world">Мир !!</p>''') print (document.find('p'))
Укажите имя тега/элемента в качестве аргумента метода «find». После выполнения приведенного выше примера кода вы должны получить следующий результат:
<p id="hello">Привет</p><p id="world">Мир !!</p>
Вы можете переключаться между синтаксическими анализаторами «xml» и «html», используя дополнительный аргумент «синтаксический анализатор»:
from pyquery import PyQuery as pq document = pq('''<p id="hello">Привет</p><p id="world">Мир !!</p>''', parser="html") print (document)
Заключение
PyQuery позволяет быстро анализировать html-документы, написав минимум кода, поскольку он включает в себя множество вспомогательных функций, которые полностью исключают необходимость написания специального кода. Его «jQuery» -подобный синтаксис и структура также помогает выбирать элементы и узлы, не углубляясь в дерево документа, особенно когда много вложенной разметки.