Elixir:
Analiza składniowa HTML
Jak to zrobić:
Elixir, z jego rozbudowanym modelem współbieżności i paradygmatem programowania funkcyjnego, nie zawiera wbudowanych możliwości parsowania HTML. Można jednak użyć popularnych bibliotek stron trzecich, takich jak Floki
, do tego celu. Floki czyni parsowanie HTML intuicyjnym i efektywnym, wykorzystując dopasowanie wzorców i rury (piping) w Elixirze.
Najpierw dodaj Floki do swoich zależności w mix.exs:
defp deps do
[
{:floki, "~> 0.31.0"}
]
end
Następnie uruchom mix deps.get
, aby zainstalować nową zależność.
Teraz przeanalizujmy prosty ciąg HTML, aby wydobyć dane. Poszukamy tytułów wewnątrz tagów <h1>
:
html_content = """
<html>
<body>
<h1>Witaj, Elixir!</h1>
<h1>Inny Tytuł</h1>
</body>
</html>
"""
titles = html_content
|> Floki.find("h1")
|> Floki.text()
IO.inspect(titles)
Przykładowe wyjście:
["Witaj, Elixir!", "Inny Tytuł"]
Aby zagłębić się głębiej, powiedzmy, że chcesz wyodrębnić linki (tagi <a>
) wraz z ich atrybutami href. Oto jak możesz to osiągnąć:
html_content = """
<html>
<body>
<a href="https://elixir-lang.org/">Oficjalna strona Elixira</a>
<a href="https://hexdocs.pm/">HexDocs</a>
</body>
</html>
"""
links = html_content
|> Floki.find("a")
|> Enum.map(fn({_, attrs, [text]}) -> {text, List.keyfind(attrs, "href", 0)} end)
IO.inspect(links)
Przykładowe wyjście:
[{"Oficjalna strona Elixira", {"href", "https://elixir-lang.org/"}}, {"HexDocs", {"href", "https://hexdocs.pm/"}}]
To podejście pozwala na efektywne nawigowanie i parsowanie dokumentów HTML, ułatwiając zadania ekstrakcji i manipulacji danymi internetowymi w aplikacjach Elixira.