Dart:
Analizando HTML

Cómo hacerlo:

Dart no proporciona soporte integrado para el análisis de HTML en sus bibliotecas centrales. Sin embargo, puedes usar un paquete de terceros como html para analizar y manipular documentos HTML.

Primero, añade el paquete html a tu archivo pubspec.yaml:

dependencies:
  html: ^0.15.0

Luego, importa el paquete en tu archivo Dart:

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

Aquí tienes un ejemplo básico de cómo analizar una cadena que contiene HTML y extraer datos:

void main() {
  var htmlDocument = """
  <html>
    <body>
      <h1>Hola, Dart!</h1>
      <p>Este es un párrafo en un HTML de ejemplo</p>
    </body>
  </html>
  """;

  // Analizar la cadena HTML
  Document document = parse(htmlDocument);

  // Extracción de datos
  String titulo = document.querySelector('h1')?.text ?? "No se encontró título";
  String parrafo = document.querySelector('p')?.text ?? "No se encontró párrafo";

  print('Título: $titulo');
  print('Párrafo: $parrafo');
}

Salida:

Título: Hola, Dart!
Párrafo: Este es un párrafo en un HTML de ejemplo

Para interactuar con páginas web del mundo real, podrías combinar el análisis de html con solicitudes HTTP (usando el paquete http para obtener contenido web). Aquí tienes un ejemplo rápido:

Primero, añade el paquete http junto con html:

dependencies:
  html: ^0.15.0
  http: ^0.13.3

Luego, busca y analiza una página HTML de la web:

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

void main() async {
  var url = 'https://example.com';
  
  // Obtener la página web
  var respuesta = await http.get(Uri.parse(url));
  
  if (respuesta.statusCode == 200) {
    var documento = parse(respuesta.body);

    // Suponiendo que la página tiene etiquetas <h1> que te interesan
    var titulares = documento.querySelectorAll('h1').map((e) => e.text).toList();
    
    print('Titulares: $titulares');
  } else {
    print('La solicitud falló con el estado: ${respuesta.statusCode}.');
  }
}

Nota: La técnica de raspado web mostrada arriba debe ser utilizada responsablemente y en cumplimiento con los términos de servicio del sitio web.