Estoy intentando extraer en csv, txt o un formato legible, los datos de las tablas en la web https://desmace.com/provincia/asturias/
Lo que quiero es introducir unas fechas inicial y final de trámite, unas fechas inicial y final de matricula fijas (01/01/1900 a 31/12/2000) y una determinada provincia de matriculación.
Los datos que quiero almacenar están dentro del código, en # Escribir encabezados en el archivo CSV.
De momento tengo este código:
Using perl Syntax Highlighting
- use strict;
- use warnings;
- use LWP::Simple;
- use HTML::TreeBuilder;
- use Text::CSV;
- # URL del sitio web
- my $url = 'https://desmace.com/provincia/asturias/';
- # Criterios de filtro
- my $fecha_tramite_min = '24/11/2024';
- my $fecha_tramite_max = '27/11/2024';
- my $fecha_matricula_min = '01/01/1900';
- my $fecha_matricula_max = '31/12/2000';
- my $prov_matriculacion_filtro = 'ASTURIAS';
- # Contenido HTML de la página
- my $html = get($url) or die "No se pudo acceder a la URL: $!";
- # Parsear el HTML
- my $tree = HTML::TreeBuilder->new;
- $tree->parse($html);
- # Abrir archivo CSV paraescribir
- my $csv = Text::CSV->new({ binary => 1, eol => "\n" });
- open my $fh, ">", "resultados.csv" or die "No se pudo crear el archivo CSV: $!";
- # Encabezados en el archivo CSV
- $csv->print($fh, ['FECHA DEL TRÁMITE', 'TRÁMITE', 'FECHA MATRÍCULA', 'MARCA', 'MODELO', 'BASTIDOR (VIN)', 'PROV. MATRICULACIÓN']);
- # Esta es la tabla que contiene los datos
- my @rows = $tree->look_down(_tag => 'tr');
- foreach my $row (@rows) {
- my @columns = $row->look_down(_tag => 'td');
- my @data;
- # Extraer valores de las columnas
- foreach my $col (@columns) {
- push @data, $col->as_text;
- }
- # Filtrar filas según los criterios
- if (@data >= 9) {
- my ($fecha_tramite, $fecha_matricula, $prov_matriculacion) = @data[0, 2, 7];
- if ($fecha_tramite ge $fecha_tramite_min && $fecha_tramite le $fecha_tramite_max &&
- $fecha_matricula ge $fecha_matricula_min && $fecha_matricula le $fecha_matricula_max &&
- $prov_matriculacion eq $prov_matriculacion_filtro) {
- $csv->print($fh, \@data);
- }
- }
- }
- # Cerrar el archivo y liberar recursos
- close $fh;
- $tree->delete;
- print "Datos filtrados guardados en 'resultados.csv'.\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Sin embargo, aunque se ejecuta "bien", no se almacenan los datos que necesito. ¿Alguna orientación de lo que puedo estar haciendo mal?
Muchas gracias de antemano.