Dart:
Analiza składniowa HTML

Jak to zrobić:

Dart nie zapewnia wbudowanego wsparcia dla przetwarzania HTML w swoich bibliotekach podstawowych. Jednakże możesz użyć pakietu zewnętrznego, takiego jak html, do przetwarzania i manipulowania dokumentami HTML.

Najpierw dodaj pakiet html do swojego pliku pubspec.yaml:

dependencies:
  html: ^0.15.0

Następnie zaimportuj pakiet do swojego pliku Dart:

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

Oto podstawowy przykład przetwarzania ciągu znaków zawierającego HTML i ekstrakcji danych:

void main() {
  var htmlDocument = """
  <html>
    <body>
      <h1>Witaj, Dart!</h1>
      <p>To jest akapit w przykładowym HTML</p>
    </body>
  </html>
  """;

  // Przetwarzanie ciągu HTML
  Document document = parse(htmlDocument);

  // Ekstrakcja danych
  String title = document.querySelector('h1')?.text ?? "Nie znaleziono tytułu";
  String paragraph = document.querySelector('p')?.text ?? "Nie znaleziono akapitu";

  print('Tytuł: $title');
  print('Akapit: $paragraph');
}

Wyjście:

Tytuł: Witaj, Dart!
Akapit: To jest akapit w przykładowym HTML

Aby wchodzić w interakcję z rzeczywistymi stronami internetowymi, możesz połączyć przetwarzanie html z żądaniami HTTP (używając pakietu http do pobierania zawartości internetowej). Oto szybki przykład:

Najpierw dodaj pakiet http razem z html:

dependencies:
  html: ^0.15.0
  http: ^0.13.3

Następnie pobierz i przetwórz stronę HTML z internetu:

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

void main() async {
  var url = 'https://example.com';
  
  // Pobieranie strony internetowej
  var response = await http.get(Uri.parse(url));
  
  if (response.statusCode == 200) {
    var document = parse(response.body);

    // Zakładając, że strona zawiera tagi <h1>, które Cię interesują
    var headlines = document.querySelectorAll('h1').map((e) => e.text).toList();
    
    print('Nagłówki: $headlines');
  } else {
    print('Żądanie zakończone niepowodzeniem ze statusem: ${response.statusCode}.');
  }
}

Uwaga: Technika web scrapingu pokazana powyżej powinna być używana odpowiedzialnie i zgodnie z warunkami korzystania ze strony internetowej.