CoderCastrov logo
CoderCastrov
Флаттер

Парсинг веб-сайтов с помощью Dart (Flutter)

Парсинг веб-сайтов с помощью Dart (Flutter)
просмотров
4 мин чтение
#Флаттер

ПАРСИНГ ДАННЫХ

Как извлечь данные с веб-сайта с помощью Flutter

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

Будучи активным разработчиком Flutter, я владею Dart и хотел спарсить данные именно с помощью Dart (хотя сейчас я рекомендую использовать Python).

Что такое парсинг веб-сайтов?

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Хотя это незаконно для некоторых веб-сайтов, здесь цель исключительно образовательная



Соберите топливо и снаряжение

1. Создайте новый проект Flutter

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

flutter create flutter_scrap

Это создаст новый проект Flutter. Проверьте работу приложения, запустив проект.

2. Добавьте зависимость web_scraper

Есть пакет pub с названием web_scraper, который упрощает парсинг. Откройте pubspec.yaml и добавьте следующую строку в раздел dependencies.

dependencies:
  web_scraper: ^0.0.6

web_scraper | Пакет Dart

Очень простая реализация парсера веб-страниц для извлечения элементов HTML. Приветствуются запросы на добавление функционала. В...

pub.dev

Запустите flutter pub get, чтобы завершить добавление зависимости

3. Соберите веб-сайт и данные для парсинга

Для этой статьи мы будем использовать веб-сайт unacademy.com.

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

4. Просмотр HTML

Веб-парсер просто считывает и анализирует HTML-код веб-страницы и извлекает из него различные элементы (например, <div>, <a>). Теперь можно задать условие для извлечения нужных элементов.

Щелкните правой кнопкой мыши на главе и выберите Просмотреть элементы (или нажмите F12). Откроется окно, в котором вы можете увидеть HTML-код соответствующего элемента.

Элемент заголовка главы

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

5. Написать парсер

Ознакомьтесь с документацией web_scraper**. **Он состоит из трех частей:

'div.Week__Wrapper-sc-1qeje5a-2 > a.Link__StyledAnchor-sc-1n9f3wx-0 > div.ItemCard__ItemInfo-xrh60s-1 > h6.H6-sc-1gn2suh-0'

Адрес здесь должен быть правильным. Для этого требуется точное планирование. Вышеуказанное представление выполнено с использованием CSS-селекторов.

Элемент заголовка можно найти внутри этой иерархии:

Здесь текст слева от . (точки) является тегом, а текст справа - классом этого тега. Таким образом, h6.H6-sc-1gn2suh-0 означает найти теги <**h6>**, которые содержат класс H6-sc-1gn2suh-0.

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

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

Вывод print(titleList) будет списком извлеченных заголовков:

flutter: [Закон всемирного тяготения Ньютона, Изменение значения 'g': Часть 2, Гравитационное поле точечной массы, Изменение значения 'g': Часть 1, Теорема Гаусса, Гравитационное поле равномерной твердой сферы и равномерной сферической оболочки, Гравитационный потенциал, Связь между гравитационным полем и потенциалом, Гравитационная потенциальная энергия, Связывающая энергия, Движение спутников, Максимальная высота, достигаемая частицей, Траектория спутников, Качественное численное значение 001: Сфера с полостью, Качественное численное значение 002: Гравитационная сила стержня, Качественное численное значение 003: Кольцо и сфера, Качественное численное значение 004: Гравитационное поле полукруглого провода, Качественное численное значение 005: Связывающая энергия и скорость выбегания, Качественное численное значение 006: Туннель и скорость, Качественное численное значение 007: Туннель и ускорение, Качественное численное значение 008: Туннель и амплитуда, Качественное численное значение 009: Вариация гравитации, Качественное численное значение 010: Вариация гравитации, Качественное численное значение 011: Отсутствие веса, Качественное численное значение 012: Вращение планеты, Качественное численное значение 013: Скорость выбегания, Качественное численное значение 014: Момент импульса, Качественное численное значение 015: Гравитационное поле и потенциал]
Результат выполнения вышеприведенного кода

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

СОВЕТ: При множественных запросах к веб-сайту сервер может распознать это как атаку DOS, что приведет к черному списку вашего IP или постоянному запрету. Поэтому, когда вы применяете цикл запросов, попробуйте добавить намеренную задержку от 2 до 5 секунд перед отправкой запроса. Если возможно, попробуйте часто менять IP. Однако вы не должны парсить данные, если на веб-сайте явно указано, что парсинг запрещен (например, robots.txt).

Заключение

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

В следующей серии будет рассмотрен парсинг с использованием Python, который обрабатывает это очень легко с помощью библиотеки beautifulsoup. Я нахожу это очень удобным и мощным по сравнению с Dart. Если вы хотите, вы можете посмотреть этот python проект.

Gist- https://gist.github.com/apgapg/ebfaae6be8891a2917db8016f3050be4

Github- https://github.com/apgapg/flutter_scrap (Покажите свою любовь, нажав 🌟)

Дополнительные материалы

Ура! И ты, и я сегодня узнали что-то новое. Поздравляю!

Свяжись со мной: LinkedIn: https://www.linkedin.com/in/ayushpgupta/ Github: https://github.com/apgapg