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

วิธีการ:

ในการแยกส่วน HTML ใน Go, คุณมักจะใช้แพคเกจ goquery หรือแพคเกจ net/html ของไลบรารีมาตรฐาน นี่คือตัวอย่างพื้นฐานที่ใช้ net/html เพื่อสกัดลิงก์ทั้งหมดจากเว็บเพจ:

package main

import (
    "fmt"
    "golang.org/x/net/html"
    "net/http"
)

func main() {
    // รับเอกสาร HTML
    res, err := http.Get("http://example.com")
    if err != nil {
        panic(err)
    }
    defer res.Body.Close()

    // วิเคราะห์เอกสาร HTML
    doc, err := html.Parse(res.Body)
    if err != nil {
        panic(err)
    }

    // ฟังก์ชันสำหรับเดินทางไปยัง DOM อย่างเรขาคณิต
    var f func(*html.Node)
    f = func(n *html.Node) {
        if n.Type == html.ElementNode && n.Data == "a" {
            for _, a := range n.Attr {
                if a.Key == "href" {
                    fmt.Println(a.Val)
                    break
                }
            }
        }
        for c := n.FirstChild; c != nil; c = c.NextSibling {
            f(c)
        }
    }

    // เดินทางไปยัง DOM
    f(doc)
}

ตัวอย่างผลลัพธ์ (สมมติว่า http://example.com มีลิงก์สองลิงก์):

http://www.iana.org/domains/example
http://www.iana.org/domains/reserved

โค้ดนี้ร้องขอหน้า HTML, วิเคราะห์, และเดินทางไปยัง DOM อย่างเรขาคณิตเพื่อหาและพิมพ์คุณลักษณะ href ของทุกแท็ก <a>.

ลึกซึ้ง

แพคเกจ net/html มีพื้นฐานสำหรับการวิเคราะห์ HTML ใน Go, โดยตรงบริหารงานโทเคนไนซ์และการสร้างต้นไม้ตามมาตรฐาน HTML5 ที่ระบุไว้ วิธีการระดับต่ำนี้มีประสิทธิภาพแต่อาจเป็นรูปแบบที่มีความยาวและซับซ้อนสำหรับงานที่ซับซ้อน

ในทางตรงกันข้าม, แพคเกจ goquery จากบุคคลที่สามที่ได้รับแรงบันดาลใจจาก jQuery, มอบอินเตอร์เฟซระดับสูงที่ทำให้การจัดการและการเดินทางใน DOM ง่ายขึ้น มันช่วยให้นักพัฒนาสามารถเขียนโค้ดที่กระชับและมีอารมณ์ขันสำหรับงานเช่นการเลือกองค์ประกอบ, การสกัดคุณลักษณะ, และการจัดการเนื้อหา

อย่างไรก็ตาม, ความสะดวกของ goquery มีราคาแลกมาที่แนบพึ่งพิงเพิ่มเติมและอาจมีประสิทธิภาพช้าลงเนื่องจากชั้นความคลาดเคลื่อน การเลือกระหว่าง net/html และ goquery (หรือไลบรารีการวิเคราะห์อื่นๆ) ขึ้นอยู่กับความต้องการเฉพาะของโครงการ, เช่น ความจำเป็นในการปรับปรุงประสิทธิภาพหรือความง่ายในการใช้งาน

ตามประวัติศาสตร์, การวิเคราะห์ HTML ใน Go ได้พัฒนาจากการทำงานกับสตริงพื้นฐานไปจนถึงการจัดการต้นไม้ DOM ที่ซับซ้อน, สะท้อนให้เห็นถึงการเติบโตของระบบนิเวศของภาษาและความต้องการของชุมชนสำหรับเครื่องมือสกัดข้อมูลเว็บและการขุดข้อมูลที่แข็งแกร่ง แม้ว่าจะมีความสามารถเนทีฟ, การเป็นที่นิยมของไลบรารีบุคคลที่สามเช่น goquery แสดงถึงความชอบของชุมชน Go ในรหัสที่โมดูลาร์และสามารถใช้ซ้ำได้ อย่างไรก็ตาม, สำหรับการใช้งานที่ต้องการประสิทธิภาพ, โปรแกรมเมอร์อาจยังคงชอบแพคเกจ net/html หรือแม้กระทั่งย้อนกลับไปใช้ regex สำหรับงานการวิเคราะห์ที่ง่าย, โดยคำนึงถึงความเสี่ยงและข้อจำกัดของการวิเคราะห์ HTML โดยใช้ regex