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>Hello, Elixir!</h1>
    <h1>Another Title</h1>
  </body>
</html>
"""

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

IO.inspect(titles)

示例输出:

["Hello, Elixir!", "Another Title"]

要深入一步,假设您想提取链接(<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 应用程序中进行网页数据提取和操作任务变得直接且简单。