Рубрики
Без рубрики

HTML разбор с использованием Python и LXML

В этой статье вы узнаете основы анализа HTML-документа с помощью Python и библиотеки LXML. Введение данных является наиболее важным ингредиентом в программировании. Это происходит во всех формах и формах. Иногда он помещается в такие документы, как CSV или JSON, но иногда он хранится в Интернете или в … HTML Parsing с использованием Python и LXML Подробнее »

Автор оригинала: Dusan Rangel.

В этой статье вы узнаете основы анализа HTML-документа с помощью Python и LXML Библиотека Отказ

Вступление

Данные являются наиболее важным ингредиентом в программировании. Это происходит во всех формах и формах. Иногда он расположен внутри документов, таких как CSV или JSON, но иногда он хранится в Интернете или в базах данных. Некоторые из него хранятся/передаются или обрабатываются через формат XML, который во многом способах аналогичен формату HTML, но его цель – передавать и хранить данные, в отличие от HTML, основной целью которого является отображение данных. Кроме того, способ написания HTML и XML похож на. Несмотря на различия и сходства, они очень хорошо дополняют друг друга.

Как XPath, так и XML разработаны одной и той же компанией W3C, которая налагает, что XPath – это самый совместимый модуль Python, который будет использоваться для анализа документов XML. Поскольку один из программных директоров, которые выдвинут вас к успеху программирования, заключается в том, чтобы «не изобретать колесо», мы собираемся обратиться к документу консорциума W3C ( https://www.w3.org/ ) и Источники в отношении синтаксиса и операторов на наших примерах, чтобы принести концепцию XPath ближе к людям, желающим понять его лучше и использовать его в реальных проблемах.

ИТ-индустрия приняла XML-способ передачи данных в качестве одного из его принципов. Представьте, что одна из ваших задач было собрать информацию из Интернета? Копирование и вставка являются одним из простейших инструментов для использования (так как он регулярно используется программистами); Это может привести нас только для того, чтобы собрать несколько простых данных из Интернета, хотя процесс может быть болезненно повторяется. И все же, в случае, если у нас будет более надежные данные, или больше веб-страниц, чтобы собрать данные, мы можем быть склонны использовать более продвинутые пакеты Python, чтобы автоматизировать наши данные сбора данных.

Прежде чем мы начнем смотреть в соскобные инструменты и стратегии, полезно знать, что соскабливание может быть не законным во всех случаях, поэтому настоятельно рекомендуется рассмотреть условия обслуживания конкретного веб-сайта или закона об авторском праве в области региона в котором работает веб-сайт.

Для целей уборки веб-данных мы будем использовать несколько библиотек Python, которые позволяют нам делать только что. Первый из них – это модуль запросов. Что это делает, так это то, что он отправляет HTTP-запросы, что возвращает нам объект ответа. Он использовал только в том случае, если желание соскрести контент из Интернета. Если мы попытаемся анализировать статический файл XML, это не нужно.

Есть много разборных модулей. LXML, STRAPY и BUILYSOUP – это некоторые из них. Сказать, какой из них лучше, часто пренебрегают, поскольку их размер и функциональность отличается друг от друга. Например, BeautifulSoup является более сложной и обслуживает вас с большим количеством функциональности, но LXML и Scrapy наступают легкий и могут помочь вам пройти через документы, используя селекторы XPath и CSS.

Есть определенные подводные камни при попытке проехать через документ, используя XPath. Общая ошибка При попытке анализировать XML с помощью XPath Notiator, состоит в том, что многие люди пытаются использовать библиотеку BeautifulSoup. На самом деле это невозможно, так как он не содержит методов прохода XPath. Для тех целей мы будем использовать библиотеку LXML.

Библиотека запросов используется в том случае, если мы хотим загрузить HTML-маркируйте с конкретного веб-сайта.

Первый шаг будет установить необходимые пакеты. Через нотация Установка PIP Все вышеперечисленные модули могут быть достаточно легко установлены.

Необходимые шаги:

  1. PIP Установить LXML (XPath модуль является частью LXML-библиотеки)
  2. PIP Установка запросов (В случае, если контент на веб-странице)

Лучший способ объяснить анализ XML – это изображение по этому поводу.

Первый шаг будет установить необходимые модули. Кормушка PIP Установка нотации Все модули выше могут быть установлены довольно легко.

Что такое XPath?

Структура документов XML и HTML структурно состоит из узлов (или узлов некоторых сортировков), что является более широкой картиной, которая представляет собой семейную древовидную структуру. Экземпляр крыши или первоначальный предком в каждом дереве называется корневым узлом, и у него нет превосходных узлов для себя. Подчиненные узлы в этом смысле соответственно называют детьми или братьями и сестрами, которые являются элементами на одном уровне, что и дети. Другие термины, используемые в навигации и прохождении через дерево, дерево – предки и потомки, которые, по сути отражают взаимосвязь узла того же, мы отражаем его в реальных примерах семейного дерева.

XPath – это язык запроса, который помогает нам перемещаться и выбирать элементы узла в дереве узла. По сути, это шаговая карта, которую нам нужно сделать, чтобы достичь определенных элементов в дереве. Единые части этой пошаговой карты называются шагами местоположения, и каждый из этих шагов приведет нас к определенной части документа.

Терминология, используемая для ориентации вдоль оси (в отношении текущего узла), очень интуитивно понятна, поскольку она использует регулярные английские выражения, связанные с реальными отношениями для семейных деревьев.

Селектор XPath

XPath Selector – это состояние, использующее, что мы могли перемещаться по XML-документу. Он описывает отношения как иерархический порядок экземпляров, включенных в наш путь. Объединяя различный сегмент синтаксиса XML, он помогает нам пройти через нужные части документа. Селектор является частью языка запроса XPath. Просто добавляя различные критерии, селектор XPath приведет нас к разным элементам в дереве документа. Лучший способ изучить синтаксис и операторы селектора XPath – это реализовать его на примере. Чтобы узнать, как настроить селектор XPath, необходимо знать синтаксис XPath. Селектор XPath скомпилируется с помощью Etree или HTML-модуля, который включен в пакет LXML. Разница только в том случае, если мы анализируем документ XML или HTML.

Селектор работает аналогично как метод находки, где он позволяет выбрать относительный путь элемента, а не абсолютный, который заставляет все проходить менее склонны к ошибкам в случае, если абсолютный путь становится слишком сложным.

Синтаксис XPath

Синтаксис XPath может быть разделен на несколько групп. Чтобы иметь точное понимание представленного материала, мы собираемся применить дополнительные перечисленные выражения и функции в нашем примерном документе, который будет перечислен ниже. В этом учебном заседании мы собираемся использовать веб-сайт, предназначенный для соскабливания упражнений.

Выбор узла:

Выражение Описание
odname. Выбирает все узлы с именем «nodeName»
/ Выбирает из корневого узла
// Выбирает узлы в документе из текущего узла, который соответствует выбору, независимо от того, где они есть.
. Выбирает текущий узел
.. Выбирает родитель текущего узла
@ Выбирает атрибуты

Используя “..” и “.” Мы можем направлять и коммутировать уровни, когда мы желаем. Два точечных обозначения приведут нас от того, где мы находимся в нашем родительском элементе, тогда как одно точечные обозначения указывают нас на текущий узел.

Способ, которым мы путешествуем из «Узел контекста» (наш справочный узел), который является вехой нашего поиска, называется «осями», и он отмечен с двойной ссудой//. Что это делает, это то, что он начинает пересекать с первого экземпляра данного узла. Этот способ выбора пути называется «относительный выбор путь». Чтобы убедиться, что//(пустое тег) выражение будет работать, он должен предшествовать звездочке (*) или тему имени. Король, проверяющий элемент и копирование его значение XPath. Мы получаем абсолютный путь.

Функции и операторы XPath

Вот 6 общих операторов, которые используются внутри запроса XPath. Операторы отмечают так же, как на простых питонах и служат той же цели. Функции предназначены для оказания поиска желаемых элементов или их содержания.

Выражение пути Результат
= Равно
!= Не равно
> Больше, чем
< Меньше чем
=> Больше или равно
=< Меньше или равно

Чтобы добавить дополнительную функциональность нашему выражению XPath, мы можем использовать некоторые функции библиотеки LXML. Все, что написано между «[]», называется предикатом, и он используется для более тесного описания пути поиска. Наиболее часто используемые функции являются Содержит () и Начинается () Отказ Эти функции и их результаты будут отображаться в таблице ниже.

Идти вверх и вниз по оси

Обычный синтаксис, используемый для прохождения вверх и вниз по осям XPath – ElementName:: Axis Отказ

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

До осей Примеры
предки // ul / li / a [Содержит (@href, ‘Ctome’)]] / Ancestor :: Узел ()
родитель // ul / li / a [Содержит (@href, ‘Ctome’)]] / parent :: Узел ()
предыдущий // ul / li / a [содержит (@href, ‘Cteply’)] / предыдущий :: div
предыдущий брат // A [содержит (@HREF, ‘CTED’)] / предыдущий брат :: *
Вниз по осям Примеры
потомство // [Начало (@HREF, каталог »)] / потомк :: *
следующий / html / body / div / div / ul / li [1] / a
следующий брат / html / body / div / div / ul / li [1] / a / следующий :: li
ребенок //div/div/section/div[2]/ol/li[1]/article/h3/child::*

Простой пример

Целью этого соскажанного упражнения состоит в том, чтобы соскрести все жанры книг на левой стороне веб-сайта. Это практически необходимо увидеть источник страницы и осмотреть некоторые из элементов, которые мы стремимся к скреплению.

from lxml import html
import requests

url = 'http://books.toscrape.com/'

# downloading the web page by making a request objec
res = requests.get(url)

# making a tree object
tree = html.fromstring(res.text)

# navingating the tree object using the XPath
book_genres = tree.xpath("//ul/li/a[contains(@href, 'categ')]/text()")[0:60]

# since the result is the list object, we iterate the elements,
# of the list by making a simple for loop
for book_genre in book_genres:
    print (book_genre.strip())

Ресурсы:

  1. https://lxml.de/
  2. https://scrapinghub.github.io/xpath-playground/
  3. https://2.python-requests.org/en/master/
  4. http://books.toscrape.com/