Elixir:
Аналіз HTML

Як це зробити:

Elixir, з його міцною моделлю конкурентності та парадигмою функціонального програмування, не має вбудованих можливостей для парсингу HTML. Втім, ви можете використовувати популярні сторонні бібліотеки, такі як Floki, для цієї мети. Floki робить парсинг HTML інтуїтивно зрозумілим та ефективним, використовуючи можливості зіставлення зразків та пайпінгу Elixir.

Спочатку, додайте Floki до залежностей вашого mix.exs:

defp deps do
  [
    {:floki, "~> 0.31.0"}
  ]
end

Потім, запустіть mix deps.get, щоб встановити нову залежність.

Тепер, давайте проаналізуємо простий HTML-рядок, щоб витягнути дані. Ми шукатимемо заголовки всередині тегів <h1>:

html_content = """
<html>
  <body>
    <h1>Привіт, Elixir!</h1>
    <h1>Ще один заголовок</h1>
  </body>
</html>
"""

titles = html_content
         |> Floki.find("h1")
         |> Floki.text()

IO.inspect(titles)

Приклад виводу:

["Привіт, Elixir!", "Ще один заголовок"]

Щоб заглибитись більше, скажімо, ви хочете витягнути посилання (теги <a>) разом з їхніми атрибутами href. Ось як ви можете це зробити:

html_content = """
<html>
  <body>
    <a href="https://elixir-lang.org/">Офіційний вебсайт Elixir</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)

Приклад виводу:

[{"Офіційний вебсайт Elixir", {"href", "https://elixir-lang.org/"}}, {"HexDocs", {"href", "https://hexdocs.pm/"}}]

Цей підхід дозволяє вам ефективно навігувати і парсити HTML-документи, роблячи завдання екстракції та маніпуляції з веб-даними простими в додатках Elixir.