При выборе средств реализации парсера нужно опираться на собственные знания и умения и на возможности языка программирования.
Рассмотрим популярные языки программирования с точки зрения имеющихся в них средств обработки регулярных выражений и специальных библиотек и надстроек для разбора html кода.
Язык программирования PHP – это скриптовый язык программирования, который активно используют в веб-разработках. На сегодняшний день его поддерживают практически все хостинг-провайдеры. Соответственно, почти все сайты с динамическим контентом сделаны именно на PHP [1].
Главная характеристика PHP – интерпретируемость. В отличие от С# или Java, которая компилируется, а затем запускается в работу, PHP создается во время обращения к нему [1].
Вторая характерная черта PHP – динамическая типизация. Язык будет интерпретировать переменную, исходя из ее значения.
Правда, есть и проблема в динамической типизации – она приводит к уменьшению скорости работы и потреблению большого количества оперативной памяти. Но динамическая типизация гибкая и удобная, поэтому PHP так популярен. В перспективе разработчики PHP стремятся к большей эффективности новых версий языка при сохранении гибкости.
Для решения основных задач парсинга в РНР имеется следующие возможности [2]:
XPATH и работа с DOM;
Библиотека SimpleHTMLDOM, которая также эффективно работает даже с HTML с ошибками.
Библиотеки SimpleXml, XMLReader и XMLParser.
Библиотека PHPQuery, которая позволяет использовать селекторы DOM для извлечения нужных фрагментов кода.
cURL, которая позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL. Есть возможность запускать одновременно несколько запросов через multi cURL.
Также важным вопросом для реализации парсера является наличие способов получения html-кода страницы в переменную для дальнейшего разбора.
Язык JavaScript очень удобен для разбора html и xml документа, так как в нем есть встроенная эффективная модель DOM. jQuery и JavaScript в целом обладает огромным набором методов для работы с DOM документа. Отметим, что Simple HTML DOM Parser, или phpQuery, хотя и являются специальными библиотеками для html-разбора на php, гораздо слабее и медленнее.
В JavaScript навигация по дереву DOM браузер априори обрабатывает очень быстро, это собственно его нативный функционал. Очень легко извлечь различные фрагменты кода, содержимого элементов из документа. Это несомненный плюс использования JavaScript в парсинге. Также удобно использовать библиотеку JQuery.
Клиентские приложения JavaScript работают в браузере пользователя, а серверные приложения – на сервере [3].
С точки зрения парсинга следует вот что:
1. Браузерные Javascript и JScript с чужими файлами не работают - это запрещено по соображениям безопасности;
2. Системный JScript (на локальном компьютере через cscript.exe, или через wscript.exe, или через HTA) – может работать с чем угодно, в том числе и с любыми чужими файлами.
Браузеры по умолчанию запрещают кроссдоменные запросы с помощью JavaScript – то есть нельзя получить с помощью JavaScript контент, содержащийся на другом домене (в этом случае приходится скачивать с чужого ресурса с помощью Ajax и jQuery).
При написании парсеров на Javascript это, пожалуй, наиболее неудобный момент.
Язык программирования Python содержит такие структуры данных как списки (lists), кортежи (tuples) и словари (dictionaries). Списки – похожи на одномерные массивы (но вы можете использовать список включающий списки – многомерный массив), кортежи – неизменяемые списки, словари – тоже списки, но индексы могут быть любого типа, а не только числовыми. «Массивы» в Python могут содержать данные любого типа, то есть в одном массиве могут находиться числовые, строковые и другие типы данных.
Рython портирован во все известные платформы и ОС.
Рассмотрим средства Рython для html-разбора и парсинга.
Прежде всего, для этого нужно решить две задачи:
1) Выгрузить и сохранить html-страницы
2) Распарсить html в удобный для дальнейшего анализа формат (csv, json, pandas dataframe etc.)
Рассмотрим инструменты Python для этих задач [4].
Для отправки http-запросов есть немало python-библиотек, наиболее известные urllib/urllib2 и Requests [5]. Отметим, что функционал Requests дает возможность посылать HTTP/1.1-запросы, используя Python. С ее помощью можно добавлять контент, например, заголовки, формы, многокомпонентные файлы и параметры, используя только простые библиотеки Python. Наиболее популярные библиотеки для парсинга html – BeatifulSoup и lxml. Выбор одной из них, скорее, обусловлен личными предпочтениями.
Также в Python можно использовать все возможности XPath, этот функционал есть в различных библиотеках.
Помимо перечисленных выше языков, в каждом или почти каждом современном языке программирования есть собственные средства для выгрузки страниц и разбора html.
Например, в Java для работы с XML есть достаточно большой набор инструментов, начиная от встроенных возможностей (которые предоставляет Core Java без использования дополнительных библиотек) и заканчивая большим набором разнообразного стороннего кода, оформленного в виде отдельных библиотек.
Для языка С# это библиотека HTMLAgilityPack. Она строит для чтения и записи DOM и поддерживает обычный XPATH [6].
Подведем итог рассмотренным трем альтернативам: Php, JavaScript и Python (отметим, что мы не рассматриваем Perl и Java только потому, что у авторов недостаточен опыт работы с этими языками).
JavaScript неудобен с точки зрения закачки чужого ресурса, сохранения его в переменную. Это делает функционал работы с DOM малопривлекательным.
Php и Python оба имеют требующиеся инструменты, эффективно работают со сторонними ресурсами, Однако, недостатком Python является необходимость подключения многочисленных библиотек, с которыми нужно разбираться. Это не только дополнительные трудности, но и затраты времени.
Таким образом, на основании приведенного анализа для реализации парсера мы предпочитаем выбрать язык PHP.
Список литературы
Язык программирования PHP: от истоков до современности – Skillbox. URL: https://skillbox.ru/media/code/php_ot_istokov_do_sovremennosti
Грималовский А., Программирование на PHP. Работа с XML. SAX, DOM – краткое введение. – Портал провайдеров. URL: https://provIDErz.ru (Дата обращения: 12.11.20).
JavaScript. Обзор языка. – Библиотека программиста. URL: https://docstore.mik.ua/manuals/ru/servguide14/intro.html
Шесть основных библиотек для программирования на Python – Хабрахабр. URL: https://habr.com/ru/post/481432/
Использование библиотеки Requests в Python – pythonist.ru URL: https://pythonist.ru/s/ispolzovanie-biblioteki-requests-v-python/
Савельева Н., Введение в xPath – Интернет-университет INTUIT. URL: http://www.intuit.ru