Dart:
Tolka HTML

Hur man gör:

Dart erbjuder inte inbyggt stöd för HTML-tolkning i sina kärnbibliotek. Du kan dock använda ett tredjepartspaket som html för att tolka och manipulera HTML-dokument.

Först, lägg till html-paketet i din pubspec.yaml-fil:

dependencies:
  html: ^0.15.0

Importera sedan paketet i din Dart-fil:

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

Här är ett grundläggande exempel på hur man tolkar en sträng som innehåller HTML och extraherar data:

void main() {
  var htmlDokument = """
  <html>
    <body>
      <h1>Hej, Dart!</h1>
      <p>Detta är ett stycke i ett exempel på HTML</p>
    </body>
  </html>
  """;

  // Tolka HTML-strängen
  Document dokument = parse(htmlDokument);

  // Extrahera data
  String titel = dokument.querySelector('h1')?.text ?? "Ingen titel hittades";
  String stycke = dokument.querySelector('p')?.text ?? "Inget stycke hittades";

  print('Titel: $titel');
  print('Stycke: $stycke');
}

Utdata:

Titel: Hej, Dart!
Stycke: Detta är ett stycke i ett exempel på HTML

För att interagera med verkliga webbsidor kan du kombinera html-tolkning med HTTP-begäranden (använda http-paketet för att hämta webbinnehåll). Här är ett snabbt exempel:

Först, lägg till http-paketet tillsammans med html:

dependencies:
  html: ^0.15.0
  http: ^0.13.3

Hämta och tolka sedan en HTML-sida från nätet:

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

void main() async {
  var url = 'https://example.com';
  
  // Hämta webbsidan
  var response = await http.get(Uri.parse(url));
  
  if (response.statusCode == 200) {
    var dokument = parse(response.body);

    // Antag att sidan har <h1>-taggar du är intresserad av
    var rubriker = dokument.querySelectorAll('h1').map((e) => e.text).toList();
    
    print('Rubriker: $rubriker');
  } else {
    print('Begäran misslyckades med status: ${response.statusCode}.');
  }
}

Obs: Tekniken för webbskrapning som visas ovan bör användas ansvarsfullt och i enlighet med webbplatsens användarvillkor.