Dart:
Analisando HTML

Como fazer:

Dart não oferece suporte integrado para análise de HTML em suas bibliotecas principais. No entanto, você pode usar um pacote de terceiros como html para analisar e manipular documentos HTML.

Primeiro, adicione o pacote html ao seu arquivo pubspec.yaml:

dependencies:
  html: ^0.15.0

Em seguida, importe o pacote para o seu arquivo Dart:

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

Aqui está um exemplo básico de análise de uma string contendo HTML e extração de dados:

void main() {
  var htmlDocument = """
  <html>
    <body>
      <h1>Olá, Dart!</h1>
      <p>Este é um parágrafo em um HTML de exemplo</p>
    </body>
  </html>
  """;

  // Analisar a string HTML
  Document document = parse(htmlDocument);

  // Extraindo dados
  String titulo = document.querySelector('h1')?.text ?? "Nenhum título encontrado";
  String paragrafo = document.querySelector('p')?.text ?? "Nenhum parágrafo encontrado";

  print('Título: $titulo');
  print('Parágrafo: $paragrafo');
}

Saída:

Título: Olá, Dart!
Parágrafo: Este é um parágrafo em um HTML de exemplo

Para interagir com páginas web reais, você pode combinar a análise de html com solicitações HTTP (usando o pacote http para buscar conteúdo web). Aqui está um exemplo rápido:

Primeiro, adicione o pacote http junto com html:

dependencies:
  html: ^0.15.0
  http: ^0.13.3

Em seguida, busque e analise uma página HTML da web:

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

void main() async {
  var url = 'https://example.com';
  
  // Buscar a página web
  var response = await http.get(Uri.parse(url));
  
  if (response.statusCode == 200) {
    var document = parse(response.body);

    // Suponha que a página tenha tags <h1> de seu interesse
    var manchetes = document.querySelectorAll('h1').map((e) => e.text).toList();
    
    print('Manchetes: $manchetes');
  } else {
    print('A solicitação falhou com o status: ${response.statusCode}.');
  }
}

Nota: A técnica de raspagem da web mostrada acima deve ser usada de maneira responsável e em conformidade com os termos de serviço do website.