Elixir:
การวิเคราะห์ HTML

วิธีทำ:

Elixir ด้วยโมเดลการทำงานพร้อมกันที่แข็งแกร่งและปรัชญาการเขียนโปรแกรมแบบฟังก์ชันไม่ได้รวมความสามารถในการแยกข้อมูล HTML เข้ามาอยู่ด้วย อย่างไรก็ตาม คุณสามารถใช้ไลบรารีของบุคคลที่สามที่นิยมเช่น Floki สำหรับวัตถุประสงค์นี้ Floki ทำให้การแยกข้อมูล HTML เป็นไปอย่างใจเอื้อมและมีประสิทธิภาพ เป็นผลมาจากคุณสมบัติการเขียนแพทเทิร์นและการใช้งานพั-pipe ของ Elixir

ก่อนอื่น เพิ่ม Floki ลงใน dependencies ของคุณใน mix.exs:

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

จากนั้น ทำการรัน mix deps.get เพื่อติดตั้ง dependency ใหม่

ตอนนี้ ลองแยกข้อมูลจากสตริง 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> tags) พร้อมกับแอตทริบิวต์ 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 เป็นไปอย่างราบรื่น