Elixir:
Analisi dell'HTML
How to: (Come fare:)
# Installa Floki con: mix deps.get {:floki, "~> 0.30.0"}
defmodule HtmlParser do
require Logger
def fetch_and_parse(url) do
case HTTPoison.get(url) do
{:ok, %HTTPoison.Response{body: body}} ->
body
|> Floki.parse()
|> Floki.find("a")
|> Enum.map(&({"Link testo:", Floki.text(&1), "URL:", Floki.attribute("href", &1)}))
{:error, %HTTPoison.Error{reason: reason}} ->
Logger.error("Errore: #{reason}")
end
end
end
# Esempio di utilizzo:
parsed_links = HtmlParser.fetch_and_parse("https://elixir-lang.org")
IO.inspect(parsed_links)
Output campione:
[
{"Link testo:", "Learn more", "URL:", "https://elixir-lang.org/learning"},
{"Link testo:", "Installation", "URL:", "https://elixir-lang.org/install.html"},
...
]
Deep Dive (Approfondimento)
La storia del parsing HTML è legata all’evoluzione del web. All’inizio, l’HTML era semplice e si poteva gestire con espressioni regolari. Man mano che HTML si è evoluto, il parsing è diventato più complesso. Librerie come Floki in Elixir sfruttano il parsing basato su alberi, che è più adatto a HTML complesso. Floki si basa su mochiweb per gestire gli alberi HTML.
Alternative come meeseeks
offrono anche parsing basato su query simili a jQuery. L’implementazione di Floki è progettata pensando alla concorrenza. Elixir, con il suo modello di attori (processi leggeri isolati), riesce a parallelizzare facilmente il parsing di grandi volumi di HTML, il che è un vantaggio significativo in termini di prestazioni e scalabilità.