1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $productosconurl = @{} $web = Invoke-WebRequest "https://www.alcampo.es/compra-online/bebidas/zumos-de-frutas/naranja/c/W110201?q=%3Arelevance&show=All" foreach($link in ($web.links.href | Group-Object).name){ if ($link -match "compra-online/bebidas/zumos-de-frutas/naranja" -and $link -notmatch "/c/") { $urlsanalizar = "https://www.alcampo.es$link" $urlsanalizar $web = Invoke-WebRequest $urlsanalizar # Datos nutricionales del producto $productos = @{} # Extraer los valores nutricionales del producto ($web.AllElements | Where Class -eq "productNutritionalInformation valoresNutricionalesTabla").innerHtml | %{ ($_ -replace "</SPAN> <SPAN ","</SPAN>|<SPAN " -replace "<.*?>" -replace " g" -replace " Kj" -replace " Kcal" -split "`n" | ? {$_.trim() -ne ""} | ? {$_.trim() -notmatch "nutricionales"}).trim() } | %{$productos.add($_.split("|")[0],$_.split("|")[1])} $pesos = ($web.AllElements | Where Class -eq "productNutritionalInformation valoresNutricionalesTabla tablaInformacionAdicional").innerText | %{ ($_ -replace "<.*?>" -split "`n" | ? {$_.trim() -ne ""}).trim() -replace "g" } $nombre = ($web.AllElements | Where Class -eq "productDesc").innerText | %{ $_ } # Añadir los valores nutricionales del producto a la estructura 0..$pesos.Count | % {if($_%2-eq 0 -and $_ -lt 19){$productos.add($pesos[$_],$pesos[$_+1])}} # Calcular el valor nutricional en función de la cantidad del alimento consumido $comidacantidad = 100 $productos.'Peso neto escurrido' $productos.Add('Valor energético(Kcal) Neto',($productos.'Valor energético(Kcal)' / $productos.'Peso Neto')*$comidacantidad) $productos.Add('Hidatos de carbono Neto',($productos.'Hidratos de carbono' / $productos.'Peso Neto')*$comidacantidad) $productos.Add('Grasas Netas',($productos.Grasas / $productos.'Peso Neto')*$comidacantidad) $productos.Add('Grasas saturadas Netas',($productos.'Grasas saturadas' / $productos.'Peso Neto')*$comidacantidad) $productos.Add('Azúcares Netos',($productos.Azúcares / $productos.'Peso Neto')*$comidacantidad) $productos.Add('Proteínas Netas',($productos.Proteínas / $productos.'Peso Neto')*$comidacantidad) # Mostrar la estructura con los valores nutricionales $productos.GetEnumerator() | sort -Property name $productosconurl.Add($nombre,$productos.Azúcares) } } $contenido = $productosconurl.GetEnumerator() | Select-Object @{n='Producto';e={$_.Key}},@{n='Azúcar';e={[Double]($_.Value)}} | sort Azúcar -Descending | ConvertTo-Html $contenido = $contenido.replace("Azúcar","Azúcar") # Datos URIs, URLs prefijados con los datos: esquema, permiten a los creadores de contenido incorporar pequeños archivos en linea en los documentos # Codificar en Base64 $base64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($contenido)) Start-Process chrome ("data:text/html;base64," + $base64) |
Código web generado en tiempo real y codificado en Base64 para que pueda ser interpretado por Google Chrome
1 |
data:text/html;base64,PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4gPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPiA8aGVhZD4gPHRpdGxlPkhUTUwgVEFCTEU8L3RpdGxlPiA8L2hlYWQ+PGJvZHk+IDx0YWJsZT4gPGNvbGdyb3VwPjxjb2wvPjxjb2wvPjwvY29sZ3JvdXA+IDx0cj48dGg+UHJvZHVjdG88L3RoPjx0aD5BesO6Y2FyPC90aD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgeSB6YW5haG9yaWEgQVVDSEFOIGJyaWNrIGRlIDEgbGl0cm88L3RkPjx0ZD4xMSwyPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgeSBtYW5nbyBBVUNIQU4gYnJpY2sgZGUgMSBsaXRybzwvdGQ+PHRkPjExLDE8L3RkPjwvdHI+IDx0cj48dGQ+TiYjMjMzO2N0YXIgZGUgbmFyYW5qYSBET04gU0lNJiMyMTE7TiBib3RlbGxhIGRlIDEsNSBsaXRyb3M8L3RkPjx0ZD4xMCw0PC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgWlVNT1NPTCBicmljayBkZSAxIGxpdHJvPC90ZD48dGQ+MTAsNDwvdGQ+PC90cj4gPHRyPjx0ZD5OJiMyMzM7Y3RhciBkZSBOYXJhbmphIEdSQU5JTkkgMzMgY2M8L3RkPjx0ZD4xMCwzPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgR1JBTklOSSBib3RlbGxhIGRlIDEgbGl0cm88L3RkPjx0ZD4xMCwxPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgR1JBTklOSSBib3RlbGxhIGRlIDEsNSBsaXRyb3M8L3RkPjx0ZD4xMCwxPC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgQVVDSEFOIGJyaWNrIGRlIDIgbGl0cm9zPC90ZD48dGQ+MTAsMTwvdGQ+PC90cj4gPHRyPjx0ZD5CcmljayB6dW1vIGV4cHJpbWlkbyBkZSBuYXJhbmphIHNpbiBwdWxwYSBET04gU0lNJiMyMTE7TiAyIGxpdHJvczwvdGQ+PHRkPjEwPC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgc29qYSB5IG5hcmFuamEgRE9OIFNJTU9OIFNPWSBicmljayBkZSAxIGxpdHJvPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBleHByaW1pZG8gZGUgbmFyYW5qYSBET04gU0lNJiMyMTE7TiBicmljayBkZSAxIGxpdHJvPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBleHByaW1pZG8gZGUgbmFyYW5qYSBzaW4gcHVscGEgRE9OIFNJTSYjMjExO04gYnJpY2sgZGUgMTIsNSBjZW50aWxpdHJvcyBwYWNrIGRlIDQgdWRzLjwvdGQ+PHRkPjEwPC90ZD48L3RyPiA8dHI+PHRkPkJyaWNrIHp1bW8gZGUgbmFyYW5qYSBjb24gcHVscGEgKDEwMCUgbmFyYW5qYSBleHByaW1pZGEpIERPTiBTSU0mIzIxMTtOIDJsPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+QnJpY2sgenVtbyBkZSBuYXJhbmphIERPTiBTSU0mIzIxMTtOIDFsPC90ZD48dGQ+MTA8L3RkPjwvdHI+IDx0cj48dGQ+QnJpY2sgenVtbyBleHByaW1pZG8gZGUgbmFyYW5qYSBzaW4gcHVscGEgRE9OIFNJTSYjMjExO04gMSBsaXRybzwvdGQ+PHRkPjEwPC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgbmFyYW5qYSB5IHNvamEgZGUgb3JpZ2VuIDEwMCUgdmVnZXRhbCBWSVZFU09ZIGRlIFBhc2N1YWwgMSBsLjwvdGQ+PHRkPjksNzwvdGQ+PC90cj4gPHRyPjx0ZD5CcmljayB6dW1vIGV4cHJpbWlkbyBuYXJhbmphIEFVQ0hBTiAxIGw8L3RkPjx0ZD45LDc8L3RkPjwvdHI+IDx0cj48dGQ+TiYjMjMzO2N0YXIgZGUgbmFyYW5qYSBNSU5VVEUgTUFJRCBib3RlbGxhIGRlIDEgbGl0cm88L3RkPjx0ZD45LDc8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBkZSBuYXJhbmphIGV4cHJpbWlkbyBjb24gcHVscGEgWlVNT1NPTCAxIGxpdHJvPC90ZD48dGQ+OSw0PC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZXhwcmltaWRvIGRlIG5hcmFuamEgc2luIHB1bHBhIFpVTU9TT0wgYm90ZWxsYSBkZSA4NSBjZW50aWxpdHJvczwvdGQ+PHRkPjksNDwvdGQ+PC90cj4gPHRyPjx0ZD5adW1vIGV4cHJpbWlkbyBkZSBuYXJhbmphIGNvbiBwdWxwYSBaVU1PU09MIGJvdGVsbGEgZGUgODUgY2VudGlsaXRyb3M8L3RkPjx0ZD45LDQ8L3RkPjwvdHI+IDx0cj48dGQ+WnVtbyBkZSBuYXJhbmphIGV4cHJpbWlkYSBzaW4gcHVscGEsIFpVTU9TT0wsIGJyaWNrIGRlIHVuIGxpdHJvLjwvdGQ+PHRkPjksNDwvdGQ+PC90cj4gPHRyPjx0ZD5OJiMyMzM7Y3RhciBkZSBuYXJhbmphIHkgbWFuZ28gR1JBTklOSSBib3RlbGxhIGRlIDEgbGl0cm88L3RkPjx0ZD45LDI8L3RkPjwvdHI+IDx0cj48dGQ+QnJpY2sgenVtbyBkZSBuYXJhbmphIGR1bGNlIEdSQU5JTkkgMSBsPC90ZD48dGQ+OTwvdGQ+PC90cj4gPHRyPjx0ZD5adW1vIGVjb2wmIzI0MztnaWNvIGRlIG1hbmdvIHkgbmFyYW5qYSBMQU1CREEgYm90ZWxsYSBkZSAxIGwuPC90ZD48dGQ+OCw5PC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgbmFyYW5qYSBmcmVzY2EgU09OQVRVUkFMIDI1MCBNaWxpbGl0cm9zPC90ZD48dGQ+OCw3PC90ZD48L3RyPiA8dHI+PHRkPkJyaWNrIHp1bW8gZGUgbmFyYW5qYSBBVUNIQU4gMSBsPC90ZD48dGQ+OCw0PC90ZD48L3RyPiA8dHI+PHRkPlp1bW8gZGUgTmFyYW5qYSBKVVZFUiBCb3RlbGxhIDEgbC48L3RkPjx0ZD44LDQ8L3RkPjwvdHI+IDx0cj48dGQ+TiYjMjMzO2N0YXIgZGUgbmFyYW5qYSB5IHphbmFob3JpYSBHUkFOSU5JIGJvdGVsbGEgZGUgMSBsaXRybzwvdGQ+PHRkPjgsMzwvdGQ+PC90cj4gPHRyPjx0ZD5adW1vIGVjb2wmIzI0MztnaWNvIGRlIG5hcmFuamEgTEFNQkRBIGJvdGVsbGEgZGUgMSBsLjwvdGQ+PHRkPjcsMTwvdGQ+PC90cj4gPHRyPjx0ZD5OJiMyMzM7Y3RhciBjb24gc3RldmlhIGRlIG5hcmFuamEgTUlOVVRFIE1BSUQgYm90ZWxsYSBkZSAxIGxpdHJvPC90ZD48dGQ+NSw3PC90ZD48L3RyPiA8dHI+PHRkPk4mIzIzMztjdGFyIGRlIG5hcmFuamEgSlVWRVIgMiBsLjwvdGQ+PHRkPjUsNjwvdGQ+PC90cj4gPC90YWJsZT4gPC9ib2R5PjwvaHRtbD4= |