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à.

See Also (Vedi Anche)