Основные Подходы К Парсингу



Введение В проектах у меня бывают ситуации, когда мне нужна база данных некоторой статической информации.

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

Хочу отметить, что хоть в моих жилах много течет, в этом примере я буду использовать Node JS, потому что он быстрее и удобнее в плане парсинга.

Что именно удобнее – расскажу далее в статье.



Можем ли мы разобрать?

Да, к сожалению (или к счастью) сеть не однородна, и каждый ресурс может быть по-своему уникален, но в нашем бизнесе ключевым моментом будет то, имеет ли этот ресурс серверный рендеринг (SSR) или клиентский.

Рендеринг и важная для нас информация подтягивается позже с помощью JS. Например, нативные апки на React или том же Angular по умолчанию имеют CSR. А чтобы пристроить туда ССР, иногда нужно изрядно попотеть.

Однако большинство сайтов с лучшими результатами в любой поисковой системе будут поддерживать SSR, потому что это мир SEO-оптимизации.

В моем примере страница, которую мы будем анализировать, представляет собой простую вики-страницу: https://uk.m.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D1%82%D1%8F%D1%87%D0%B8%D1%85_%D0%BF%D0%BE%D1%80%D1%96%D0%B4 Мы видим, что эта страница использует SSR, потому что в первом запросе мы видим, что информация о породе уже содержится в ответе сервера.



Основные подходы к парсингу



Как мы будем разбирать?

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

В моем примере мне нужны были названия и фотографии пород. Затем я перевел названия на английский и русский, а фотографии сохранил в каталоге с приложением.

Кстати, потом все это перегонялось в Постгрес с помощью аналогичного скрипта.

Первое, что нужно сделать, это проверить необходимые элементы страницы через инструменты браузера (в моем случае Chrome).



Основные подходы к парсингу



Основные подходы к парсингу

Нажмите на выбранный элемент и посмотрите HTML-код на боковой панели инструментов.



Основные подходы к парсингу

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

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



Основные подходы к парсингу



Приступим к разбору!

Создадим папку с проектом и в корне создадим main.js. Затем из корня проекта откройте терминал и напишите:

npm init



Основные подходы к парсингу

Все, что там просят, можно пропустить, в нашем случае это не имеет значения.

Для нашего приложения нам понадобится аксиомы для HTTP-запросов, узел-html-парсер парсить html, фс.

обещания для асинхронных вызовов файловой системы, Google-переводчик-API , для перевода с украинского.

В терминале пишем следующую команду:

npm install axios node-html-parser @vitalets/google-translate-api --save

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

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

Мы просто сделаем к нему запрос GET и получим наш HTML. Далее, что мы можем делать с нашим HTML? Есть несколько вариантов разбора: XPath и родной JS запросселектор & getElementsBy .

я использовал запросселектор потому что это упрощает написание парсера, потому что его легче тестировать (ниже покажу как), лично я понимаю его синтаксис лучше, чем синтаксис XPath .

Что ж, попробуем написать селектор для нашего имени.

И здесь в игру вступает красота выбора.

запросселектор , потому что мы просто заходим в инструменты разработки в браузере и тестируем все это там.

Здесь я разобрал все тег и возьмите текст ярлык.



Основные подходы к парсингу

Давайте посмотрим, что мы можем использовать для анализа фотографий:

Основные подходы к парсингу



Основные подходы к парсингу

Как мы можем быть уверены, что сможем проанализировать это из нашего HTML? Мы можем скачать этот HTML любым удобным способом (cURL, Postman) и проверить, есть ли там фотография.



Основные подходы к парсингу

И, конечно же, нет элемента с классом .

image-lazy-loaded. Но в качестве решения мы можем взять элемент с классом «.

image», а затем взять тег и возьмите исходную фотографию из дочернего элемента.

Добавим в код необходимые селекторы: В коде проверяем, есть ли у нас уже фотография с названием породы (возможно, приложение будет запускаться много раз, чтобы лишний раз не делать запрос к вики), а если нет, то скачиваем фотографию в локальный каталог.

Также проверяем, есть ли вообще у породы фото, ведь его может не быть.



Основные подходы к парсингу

Теперь давайте создадим метод, который будет загружать.

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

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

Я также выделил создание новой строки в отдельный метод, потому что это специфичная для платформы вещь.

Попробуем все это запустить командой:

node main.js

Весь код решен:


Результаты



Основные подходы к парсингу



Основные подходы к парсингу

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

Также я сделал видео, демонстрирующее написанное в статье, если хотите увидеть процесс вживую - здесь связь .

Теги: #HTML #web #js #node.js #парсинг #обработка #парсер #сканер #скраппинг #сканирование #разбор HTML

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.