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}.');
  }
}

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