ניתוח הוא ניתוח ופירוש מבנה המסמך. תהליך הניתוח עשוי לכלול חילוץ של אלמנטים, תכונות או נתונים ספציפיים מהמסמך ואימות שהמסמך מעוצב היטב תוך הקפדה על סטנדרטים או כללים ספציפיים. ניתוח משמש בעיקר לחילוץ נתונים מדפי אינטרנט או מניפולציה של המבנה של דפי אינטרנט לפני הצגתם למשתמשים.
Go מספקת חבילות לעבודה עם מסמכים, כולל פורמטים HTML ו-XML בשימוש פופולרי בדפי אינטרנט. ה html החבילה מספקת פונקציות לאסימונים ולניתוח HTML.
חבילת HTML
ה html החבילה מספקת אסימון ומנתח תואמי HTML5 לניתוח ולטפל במסמכי HTML, חציית עץ הניתוח ותפעול מבנה העץ. ה html חבילה היא חבילה מובנית של הספרייה הסטנדרטית של Go.
אחד המאפיינים העיקריים של html החבילה היא לְנַתֵחַ פונקציה שיכולה לנתח מסמכי HTML ולהחזיר את צומת השורש של עץ הניתוח, משם אתה יכול להשתמש בפונקציות כמו ילד ראשון ו NextSibling כדי לנווט בעץ ולחלץ מידע מהמסמך. החבילה מספקת גם את ParseFragment פונקציה לניתוח קטעים של מסמכי HTML.
ה EscapeString הפונקציה שימושית עבור בריחה של תווים מיוחדים במחרוזות להכללה בטוחה יותר ב-HTML; אתה יכול להשתמש בפונקציה זו כדי למנוע
סקריפטים בין אתרים (XSS) התקפות על ידי המרת תווים מיוחדים לישויות HTML המתאימות להם.כדי להתחיל עם html חבילה, תוכל לייבא את החבילה לקבצי הפרויקט שלך ב- Go.
יְבוּא"golang.org/x/net/html"
ה html החבילה אינה מספקת פונקציות ליצירת HTML. במקום זאת, אתה יכול להשתמש בחבילת html/template, המציעה סט של פונקציות ליצירת תבניות HTML. ה html/תבנית החבילה מספקת פונקציה תבנית. HTMLEscape לכתיבת גרסאות בריחה של HTML לכותב תגובה.
ה html/תבנית החבילה היא גם חלק מהספרייה הסטנדרטית, וכאן תוכל לייבא את החבילה.
יְבוּא"html/תבנית"
ה html חבילה היא חבילת התבניות הנפוצה ביותר במערכת האקולוגית של Go ותומכת בפעולות ובסוגי נתונים שונים.
ניתוח HTML ב-Go
ה לְנַתֵחַ פונקציה של html החבילה עוזרת בניתוח טקסט HTML ומסמכים. ה לְנַתֵחַ הפונקציה לוקחת ב-an io. קוֹרֵא מופע מכיוון שהוא ארגומנט ראשון המכיל את מסמך הקובץ ו-*html. צוֹמֶת מופע, שהוא צומת השורש של מסמך ה-HTML
הנה איך אתה יכול להשתמש ב- לְנַתֵחַ פונקציה לנתח דף אינטרנט ולהחזיר את כל כתובות האתרים בדף האינטרנט.
יְבוּא (
"fmt"
"golang.org/x/net/html"
"נטו/http"
)funcרָאשִׁי() {
// שלח בקשת HTTP GET לדף האינטרנט example.com
resp, err := http. לקבל(" https://www.example.com")
אם טעות != אֶפֶס {
fmt. Println("שְׁגִיאָה:", טעות)
לַחֲזוֹר
}
לִדחוֹת בהתאמה גוּף. סגור()// השתמש בחבילת html כדי לנתח את גוף התגובה מהבקשה
doc, err := html. ניתוח (בהתאמה גוּף)
אם טעות != אֶפֶס {
fmt. Println("שְׁגִיאָה:", טעות)
לַחֲזוֹר
}
// מצא והדפיס את כל הקישורים בדף האינטרנט
var קישורים []חוּט
var קישור func(*html. צוֹמֶת)
קישור = func(n *html. צוֹמֶת) {
אם נ. הקלד == html. ElementNode && n. נתונים == "א" {
ל _, a := טווח נ. Attr {
אם א. מפתח == "הרף" {
// מוסיף ערך קישור חדש כאשר התכונה תואמת
קישורים = לְצַרֵף(קישורים, א. ואל)
}
}
}// חוצה את ה-HTML של דף האינטרנט מצומת הצאצא הראשון
ל c := n. ילד ראשון; c != אֶפֶס; c = c. NextSibling {
קישור (ג)
}
}
קישור (דוק)
// עובר בלולאות דרך פרוסת הקישורים
ל _, l := טווח קישורים {
fmt. Println("קישור:", ל)
}
}
ה רָאשִׁי הפונקציה שולחת בקשת HTTP GET לאתר עם ה- לקבל פונקציה של http חבילה ומחזירה את גוף תגובת הדף. ה לְנַתֵחַ פונקציה של html החבילה מנתחת את גוף התגובה ומחזירה את מסמך ה-HTML.
ה קישורים משתנה הוא פרוסת המחרוזות שתחזיק את כתובות האתרים מדף האינטרנט. ה קישור הפונקציה לוקחת את הפניה למצביע ל- צוֹמֶת שיטה עבור html חבילה, ואת מַפְתֵחַ השיטה של מופע התכונה מהצומת מחזירה נתונים הכלולים בתכונה שצוינה (במקרה זה, href). הפונקציה חוצה את המסמך עם ה- NextSibling שיטה מה ילד ראשון צומת כדי להדפיס כל כתובת אתר בדף האינטרנט. לבסוף, לולאת for מדפיסה את כל כתובות ה-URL מה- קישורים פרוסה.
הנה התוצאה של הפעולה.
יצירת HTML ב-Go
ה html/תבנית החבילה מספקת סט של פונקציות לניתוח וביצוע בטוחים ויעילים של תבניות HTML. החבילה מיועדת לשימוש בשילוב עם html חבילה, המספקת פונקציות לניתוח ולטפל ב-HTML.
אתה יכול ליצור HTML לעיבוד בצד השרת עם ה- html/תבנית חֲבִילָה. יצירת HTML שימושית למקרי שימוש רבים כמו שליחת אימיילים, עיבוד חזיתי בצד השרת ועוד רבים אחרים. אתה יכול להשתמש בסוגי נתונים מובנים של Go כמו מפות ומבנים כדי ליצור אינטראקציה ולתפעל את ה-HTML של דף האינטרנט שלך.
תצטרך להבין עבור לתחביר תבניות HTML כדי ליצור HTML בהצלחה עם ה html/תבנית חֲבִילָה.
יְבוּא (
"html/תבנית"
"os"
)סוּג עמוד אינטרנט מבנה {
כותרת חוּט
כּוֹתֶרֶת חוּט
טֶקסט חוּט
}funcרָאשִׁי() {
// הגדר את התבנית
tmpl := `{{.כותרת}} {{.כּוֹתֶרֶת}}
{{.טֶקסט}}
`// הגדר את הנתונים לשימוש בתבנית
אינטרנט := דף אינטרנט{
כותרת: "דף לדוגמה",
כּוֹתֶרֶת: "ברוך הבא לאתר האינטרנט שלי!",
טֶקסט: "זהו דף הבית של האתר שלי.",
}// צור תבנית חדשה ונתח את מחרוזת התבנית
t, err := תבנית. חָדָשׁ("עמוד אינטרנט").נתח (tmpl)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
// בצע את התבנית וכתוב את התוצאה ל-stdout
טעות = t. בצע (os. Stdout, אינטרנט)
אם טעות != אֶפֶס {
בהלה(לִטְעוֹת)
}
}
ה tmpl משתנה מחזיק את מחרוזת ה-HTML. מחרוזת ה-HTML משתמשת בתחביר תבניות Go כדי להגדיר את כותרת העמוד, an h1 כותרת ופיסקה של טקסט. ה עמוד אינטרנט struct מגדיר את שדות הנתונים עבור דף האינטרנט עם ה- כותרת, כּוֹתֶרֶת, ו טֶקסט שדות.
ה לְנַתֵחַ שיטת ה חָדָשׁ הפונקציה של חבילת התבנית יוצרת ומנתחת תבנית חדשה עם מחרוזת התבנית. ה לבצע הפונקציה של מופע התבנית החדש מבצעת את התבנית עם הנתונים ממופע ה-struct שלך ומחזירה את התוצאה לפלט הסטנדרטי (במקרה זה, היא מדפיסה את התוצאה למסוף).
בניית יישומי אינטרנט עם Go
למידה על ניתוח ויצירת HTML עם Go הוא צעד אחד בכיוון הנכון לקראת בניית יישומי אינטרנט מתוחכמים יותר עם Go. אתה יכול להשתמש במסגרות כמו Gin ו-Echo ובנתבים כמו Gorilla Mux וה-Chi Router כדי לבנות את צד השרת של האינטרנט שלך יישום.
חבילות אלו בנויות על net/http חבילה (החבילה המובנית לאינטראקציה עם HTTP ב-Go) והפשטה את המורכבות של הגדרת שרתים ונתבים ב-Go.