Сравнительный анализ языков программирования для реализации парсера - Студенческий научный форум

XIII Международная студенческая научная конференция Студенческий научный форум - 2021

Сравнительный анализ языков программирования для реализации парсера

Мешков В.Е. 1, Воскобойников В.А. 1, Пикулина Ю.В. 1
1ИТ филиал ДГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

При выборе средств реализации парсера нужно опираться на собственные знания и умения и на возможности языка программирования.

Рассмотрим популярные языки программирования с точки зрения имеющихся в них средств обработки регулярных выражений и специальных библиотек и надстроек для разбора 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

Просмотров работы: 56