Dart:
Розбір HTML

Як це зробити:

Dart не надає вбудовану підтримку для парсингу HTML у своїх основних бібліотеках. Однак, ви можете використати сторонній пакет, як-от html, для парсингу та маніпулювання HTML-документами.

Спочатку додайте пакет html до вашого файлу pubspec.yaml:

dependencies:
  html: ^0.15.0

Потім імпортуйте пакет у ваш Dart файл:

import 'package:html/parser.dart' show parse;
import 'package:html/dom.dart';

Ось базовий приклад парсингу рядка, що містить HTML, і вилучення даних:

void main() {
  var htmlDocument = """
  <html>
    <body>
      <h1>Привіт, Dart!</h1>
      <p>Це абзац у зразковому HTML</p>
    </body>
  </html>
  """;

  // Парсинг рядка HTML
  Document document = parse(htmlDocument);

  // Витягування даних
  String title = document.querySelector('h1')?.text ?? "Заголовок не знайдено";
  String paragraph = document.querySelector('p')?.text ?? "Абзац не знайдено";

  print('Заголовок: $title');
  print('Абзац: $paragraph');
}

Вивід:

Заголовок: Привіт, Dart!
Абзац: Це абзац у зразковому HTML

Щоб взаємодіяти з реальними веб-сторінками, ви можете поєднати парсинг html з HTTP запитами (використовуючи пакет http для отримання веб-контенту). Ось швидкий приклад:

Спочатку додайте пакет http разом з html:

dependencies:
  html: ^0.15.0
  http: ^0.13.3

Потім, отримайте та проаналізуйте HTML-сторінку з мережі:

import 'package:http/http.dart' as http;
import 'package:html/parser.dart' show parse;

void main() async {
  var url = 'https://example.com';
  
  // Отримання вебсторінки
  var response = await http.get(Uri.parse(url));
  
  if (response.statusCode == 200) {
    var document = parse(response.body);

    // Припустимо, що сторінка містить теги <h1>, які вас цікавлять
    var headlines = document.querySelectorAll('h1').map((e) => e.text).toList();
    
    print('Заголовки: $headlines');
  } else {
    print('Запит завершився з помилкою: ${response.statusCode}.');
  }
}

Примітка: Техніка веб-скрейпінгу, показана вище, має використовуватися відповідально та відповідно до умов обслуговування вебсайту.