Dart:
Analysering av HTML

Hvordan gjøre det:

Dart tilbyr ikke innebygd støtte for HTML-parsing i sine kjernelibraryer. Du kan imidlertid bruke en tredjepartspakke som html for å parse og manipulere HTML-dokumenter.

Først, legg til html-pakken i din pubspec.yaml-fil:

dependencies:
  html: ^0.15.0

Deretter importerer du pakken inn i din Dart-fil:

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

Her er et grunnleggende eksempel på parsing av en streng som inneholder HTML og ekstraksjon av data:

void main() {
  var htmlDocument = """
  <html>
    <body>
      <h1>Hei, Dart!</h1>
      <p>Dette er et avsnitt i et eksempel på HTML</p>
    </body>
  </html>
  """;

  // Parse HTML-strengen
  Document document = parse(htmlDocument);

  // Ekstrakter data
  String tittel = document.querySelector('h1')?.text ?? "Ingen tittel funnet";
  String avsnitt = document.querySelector('p')?.text ?? "Ingen avsnitt funnet";

  print('Tittel: $tittel');
  print('Avsnitt: $avsnitt');
}

Utdata:

Tittel: Hei, Dart!
Avsnitt: Dette er et avsnitt i et eksempel på HTML

For å samhandle med virkelige nettsider, kan du kombinere html-parsing med HTTP-forespørsler (ved å bruke http-pakken for å hente nettinnhold). Her er et raskt eksempel:

Først, legg til http-pakken sammen med html:

dependencies:
  html: ^0.15.0
  http: ^0.13.3

Deretter, hent og parse en HTML-side fra nettet:

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

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

    // Anta at siden har <h1>-tagger du er interessert i
    var overskrifter = document.querySelectorAll('h1').map((e) => e.text).toList();
    
    print('Overskrifter: $overskrifter');
  } else {
    print('Forespørselen mislyktes med status: ${response.statusCode}.');
  }
}

Merk: Teknikken for nett-skraping som er vist ovenfor, bør brukes ansvarlig og i samsvar med nettstedets brukervilkår.