Dart:
HTML:n jäsentäminen

Kuinka:

Dart ei tarjoa sisäänrakennettua tukea HTML:n jäsentämiseen sen peruskirjastoissa. Voit kuitenkin käyttää kolmannen osapuolen pakettia, kuten html, HTML-dokumenttien jäsentämiseen ja manipulointiin.

Lisää ensin html-paketti pubspec.yaml-tiedostoosi:

dependencies:
  html: ^0.15.0

Tuo sitten paketti Dart-tiedostoosi:

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

Tässä on perusesimerkki merkkijonon jäsentämisestä, joka sisältää HTML:ää ja tietojen uuttamisesta:

void main() {
  var htmlDocument = """
  <html>
    <body>
      <h1>Hei, Dart!</h1>
      <p>Tämä on kappale esimerkki-HTML:ssä</p>
    </body>
  </html>
  """;

  // Jäsennä HTML-merkkijono
  Document document = parse(htmlDocument);

  // Tietojen poiminta
  String title = document.querySelector('h1')?.text ?? "Otsikkoa ei löytynyt";
  String paragraph = document.querySelector('p')?.text ?? "Kappaletta ei löytynyt";

  print('Otsikko: $title');
  print('Kappale: $paragraph');
}

Tuloste:

Otsikko: Hei, Dart!
Kappale: Tämä on kappale esimerkki-HTML:ssä

Oikeiden verkkosivujen kanssa vuorovaikuttamiseksi saatat yhdistää html-jäsentämisen HTTP-pyyntöihin (käyttäen http-pakettia web-sisällön noutamiseen). Tässä on nopea esimerkki:

Lisää ensin http-paketti yhdessä html-paketin kanssa:

dependencies:
  html: ^0.15.0
  http: ^0.13.3

Hae ja jäsentä sitten HTML-sivu verkosta:

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

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

    // Oletetaan, että sivulla on <h1>-tageja, jotka kiinnostavat sinua
    var headlines = document.querySelectorAll('h1').map((e) => e.text).toList();
    
    print('Otsikot: $headlines');
  } else {
    print('Pyyntö epäonnistui tilakoodilla: ${response.statusCode}.');
  }
}

Huom: Yllä näytettyä verkon kaavintatekniikkaa tulisi käyttää vastuullisesti ja noudattaen verkkosivuston käyttöehtoja.