В этом руководстве вы познакомитесь с PyQuery
, библиотекой Python, которая позволяет выполнять запросы jQuery к документам XML. Синтаксически это очень похоже на jQuery , и если вы знакомы с jQuery, это должно быть легче следовать.
Начало работы с PyQuery
Чтобы начать работу с PyQuery
, установите пакет Python с помощью PIP.
1
|
pip install pyquery
|
После установки PyQuery
импортируйте его в программу Python.
1
|
from pyquery import PyQuery as pq
|
Давайте начнем с базового примера того, как это работает. Рассмотрим следующий HTML:
1
2
3
4
5
|
<div id=»divMain»>
<span>
Hello World
</div>
|
Передайте входной XML объекту PyQuery
и вы сможете применить к нему запросы в стиле jQuery.
1
|
divMain = pq(«<div id=’divMain’><span>Hello World
|
Предположим, что divMain
является объектом jQuery и распечатывает HTML-содержимое div.
1
|
print divMain(‘#divMain’).html()
|
Сохраните изменения и попробуйте запустить программу. Вы должны иметь следующий вывод:
1
|
<span>Hello World
|
Чтобы получить доступ к тексту Hello World
изнутри диапазона, код должен быть:
1
|
print divMain(‘#divMain’).text()
|
Сохраните изменения и попробуйте запустить код. Вы должны иметь следующий вывод:
1
|
Hello World
|
Манипулирование атрибутами с помощью PyQuery
Теперь давайте посмотрим, как читать атрибуты с PyQuery
библиотеки PyQuery
. Предположим, что у вас есть элемент HTML, как показано:
1
2
3
4
|
<ul id=»ulMain»>
<li>Roy</li>
<li>Hari</li>
</ul>
|
Используйте библиотеку PyQuery
для чтения вышеуказанного содержимого HTML.
1
|
ulMain = pq(«<ul id=’ulMain’><li>Roy</li><li>Hari</li></ul>»)
|
Попробуем получить доступ к атрибуту идентификатора ulMain
ul.
1
|
print ulMain.attr(‘id’)
|
Сохраните вышеуказанные изменения и попробуйте запустить программу Python. На терминале должен быть напечатан идентификатор ulMain
.
Вы видели, как получить доступ к атрибуту идентификатора ul ulMain
. Давайте попробуем установить имя класса для того же элемента ulMain
. Чтобы указать атрибут имени класса, вам нужно указать имя атрибута и его соответствующее значение, как показано:
1
|
ulMain.attr(‘class’,’testclass’)
|
Напечатайте объект ulMain
и у вас должен быть элемент с атрибутом class.
1
2
3
4
|
<ul id=»ulMain» class=»testclass»>
<li>Roy</li>
<li>Hari</li>
</ul>
|
Вы также можете добавлять и удалять классы напрямую, без использования метода attr
. Чтобы добавить класс к элементу, вы можете использовать метод addClass
.
1
|
ulMain.addClass(‘test’)
|
Чтобы удалить существующий класс из элемента, вы можете использовать метод removeClass
.
1
|
ulMain.removeClass(‘test’)
|
Обработка CSS с использованием PyQuery
Помимо атрибутов, элемент будет иметь некоторые свойства CSS. Чтобы добавить или изменить свойства CSS, вы можете использовать метод css
и указать свойства. Допустим, вы хотите указать высоту в стиле ul ulMain
. Следующий код добавит требуемые свойства стиля к элементу.
1
|
ulMain.css(‘height’,’100px’)
|
Сохраните вышеуказанные изменения и попробуйте выполнить программу Python. Вы должны напечатать ul ulMain
вместе с новым стилем.
1
2
3
4
|
<ul id=»ulMain» style=»height: 100px»>
<li>Roy</li>
<li>Hari</li>
</ul>
|
Чтобы добавить несколько стилей к элементу, вы можете указать их, как показано:
1
|
ulMain.css({‘height’:’100px’,’width’:’100px’})
|
Запустите программу, и вы должны добавить стили в ulMain
.
1
2
3
4
|
<ul id=»ulMain» style=»width: 100px; height: 100px»>
<li>Roy</li>
<li>Hari</li>
</ul>
|
Создание и добавление элементов
Во время создания динамического элемента вам необходимо создать новые элементы и добавить их к существующему родительскому элементу, где они будут отображаться. Давайте посмотрим, как создавать и добавлять элементы с помощью PyQuery
.
Предположим, у вас есть основной контейнер div, называемый divMain
.
1
|
divMain = pq(«<div id=’divMain’></div>»)
|
Давайте создадим новый элемент span, используя PyQuery
.
1
|
span = pq(‘<span>Hello World
|
Добавьте некоторые свойства CSS в span.
1
|
span.css({‘color’:’blue’,’font-weight’:’bold’})
|
PyQuery
предоставляет метод для добавления элементов к существующим элементам. Вы можете использовать метод append
для добавления элемента span в div divMain
. Вот код:
1
2
|
divMain.append(span)
print divMain
|
Сохраните изменения и запустите программу. Вы должны увидеть распечатанный divMain
с добавленным к нему вновь созданным диапазоном.
1
2
3
4
5
|
<div id=»divMain»>
<span style=»color: blue; font-weight: bold»>
Hello World
</div>
|
Вы использовали метод append для добавления span к div. У вас есть другой альтернативный метод с именем appendTo
который добавит узлы к значению. В приведенном выше случае вы можете использовать метод так:
1
|
span.appendTo(divMain)
|
Поиск элементов с помощью PyQuery
PyQuery
предоставляет методы для поиска дочерних элементов, следующих элементов, ближайших элементов и т. Д. Он также предоставляет методы для фильтрации и поиска элементов внутри определенного узла.
Предположим, что у вас есть определенный фрагмент HTML, как показано:
01
02
03
04
05
06
07
08
09
10
11
|
<div id=»divMain»>
<div id=»content»>
<ul>
<li>Jade</li>
<li>Jim</li>
</ul>
</div>
<div id=»list»>
<span>Hello World
</div>
</div>
|
Добавьте следующий HTML- PyQuery
объекту PyQuery
:
01
02
03
04
05
06
07
08
09
10
11
|
divMain = pq(«<div id=’divMain’>»+
«<div id=’content’>»+
«<ul>»+
«<li>Jade</li>»+
«<li>Jim</li>»+
«</ul>»
«</div>»+
«<div id=’list’>»+
«<span>Hello World
«</div>»+
«</div>»)
|
Давайте использовать PyQuery
чтобы найти дочерних элементов div divMain
. Добавьте следующую строку кода, чтобы напечатать дочерние divMain
.
1
|
print divMain.children()
|
При запуске программы вы должны иметь следующий вывод:
1
2
3
4
5
6
7
|
<div id=»content»>
<ul>
<li>Jade</li>
<li>Jim</li>
</ul>
</div>
<div id=»list»><span>Hello World
|
Чтобы найти ближайший элемент к элементу, вы можете использовать метод closest
. Чтобы найти ближайший элемент div к span, код должен быть:
1
|
print divMain(‘span’).closest(‘div’)
|
Приведенная выше команда вернет следующий вывод:
1
|
<div id=»list»><span>Hello World
|
Метод find
также доступен для поиска элементов. Например, чтобы найти диапазон внутри divMain
, вам нужно вызвать метод, как показано ниже:
1
|
print divMain.find(‘span’)
|
Приведенная выше команда вернула бы span.
1
|
<span>Hello World
|
Вставить элемент внутри HTML
В то время как append
выполняет добавление элементов к существующим элементам, иногда вам нужно вставить элементы после или перед определенными элементами. PyQuery
предоставляет метод для вставки элементов до или после других элементов.
Давайте определим новый элемент абзаца, который будет вставлен после span внутри divMain
div.
1
|
p = pq(‘<p>Welcome</p>’)
|
Вызовите метод insertAfter
для элемента абзаца p
чтобы вставить его после span.
1
2
|
p.insertAfter(divMain(‘span’))
print divMain
|
Сохраните вышеуказанные изменения и запустите программу Python. Вы должны иметь следующий вывод:
01
02
03
04
05
06
07
08
09
10
11
12
|
<div id=»divMain»>
<div id=»content»>
<ul>
<li>Jade</li>
<li>Jim</li>
</ul>
</div>
<div id=»list»>
<span>Hello World
<p>Welcome</p>
</div>
</div>
|
Точно так же у вас есть метод insertBefore
, который вставляет перед элементом. Измените код, как показано ниже, чтобы использовать метод insertBefore
:
1
2
|
p.insertBefore(divMain(‘span’))
print divMain
|
Сохраните изменения и запустите программу. Вы должны увидеть следующий вывод на терминале:
01
02
03
04
05
06
07
08
09
10
11
12
|
<div id=»divMain»>
<div id=»content»>
<ul>
<li>Jade</li>
<li>Jim</li>
</ul>
</div>
<div id=»list»>
<p>Welcome</p>
<span>Hello World
</div>
</div>
|
Завершение
В этом руководстве вы PyQuery
, как начать работу с PyQuery
, библиотекой Python, которая позволяет выполнять запросы jQuery к документам XML. Вы видели, как управлять атрибутами и стилями CSS элементов HTML.
Вы узнали, как создавать и добавлять элементы к существующим элементам и вставлять новые элементы до и после элементов. То, что вы увидели в этом уроке, является лишь верхушкой айсберга, и эта библиотека предлагает гораздо больше.
Для получения более подробной информации об использовании этой библиотеки, я бы рекомендовал прочитать официальную документацию . Дайте нам знать ваши предложения в комментариях ниже.