GoDasturchi
Page Fetching and Link Extraction

Page Fetching and Link Extraction

Sahifani olish va havolalarni ajratish

Crawler'ning birinchi ikkita qismi: berilgan URL uchun HTML mazmunini olish (fetch), va o'sha mazmun ichidan havolalarni ajratish (extract). Bizning soxta "veb"imizda olish — oddiy map'dan o'qish, Composite Types kursidagi ikki qiymatli andaza bilan:

example.go
func FetchPage(pages map[string]string, url string) (string, error) {
    html, ok := pages[url]
    if !ok {
        return "", fmt.Errorf("page not found: %s", url)
    }
    return html, nil
}

Havolalarni ajratish uchun `regexp` paketidan foydalanamiz — HTML'dagi href="..." qismlarini topadigan naqsh (pattern):

example.go
var linkPattern = regexp.MustCompile(`href="([^"]+)"`)

func ExtractLinks(html string) []string {
    matches := linkPattern.FindAllStringSubmatch(html, -1)
    links := make([]string, 0, len(matches))
    for _, m := range matches {
        links = append(links, m[1])
    }
    return links
}

regexp.MustCompile naqshni bir marta, dastur boshida tayyorlaydi (Must prefiksi — Errors Are Values kursidagi "bu yerda xato bo'lishi mumkin emas, bo'lsa panic qiling" andazasi: agar naqshning o'zi noto'g'ri yozilgan bo'lsa, bu dasturchining xatosi, ishga tushirish vaqtidagi muammo emas). FindAllStringSubmatch(html, -1) barcha mos kelishlarni topadi (-1 — cheksiz son), har biri ikkita elementli slice: to'liq moslik va qavs ichidagi guruh (([^"]+) — qo'shtirnoq ichidagi URL'ning o'zi).

>_ Exercise

FetchPage(pages map[string]string, url string) (string, error) funksiyasini yozing — berilgan pages map'idan URL'ning HTML mazmunini qaytaradi, topilmasa xato beradi. ExtractLinks(html string) []string funksiyasini yozing — berilgan linkPattern yordamida barcha href havolalarini topib qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Fetcher va link extractor — crawler'ning ikkita eng asosiy qismi: biri ma'lumotni oladi, ikkinchisi undan navbatdagi qadamlarni (havolalarni) chiqarib oladi. regexp paketi HTML kabi yarim-strukturaviy matndan naqsh bo'yicha ma'lumot ajratib olishning standart vositasi.

NEXT UP

Tracking Visited URLs

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Page Fetching and Link Extraction

Sahifani olish va havolalarni ajratish

Crawler'ning birinchi ikkita qismi: berilgan URL uchun HTML mazmunini olish (fetch), va o'sha mazmun ichidan havolalarni ajratish (extract). Bizning soxta "veb"imizda olish — oddiy map'dan o'qish, Composite Types kursidagi ikki qiymatli andaza bilan:

example.go
func FetchPage(pages map[string]string, url string) (string, error) {
    html, ok := pages[url]
    if !ok {
        return "", fmt.Errorf("page not found: %s", url)
    }
    return html, nil
}

Havolalarni ajratish uchun `regexp` paketidan foydalanamiz — HTML'dagi href="..." qismlarini topadigan naqsh (pattern):

example.go
var linkPattern = regexp.MustCompile(`href="([^"]+)"`)

func ExtractLinks(html string) []string {
    matches := linkPattern.FindAllStringSubmatch(html, -1)
    links := make([]string, 0, len(matches))
    for _, m := range matches {
        links = append(links, m[1])
    }
    return links
}

regexp.MustCompile naqshni bir marta, dastur boshida tayyorlaydi (Must prefiksi — Errors Are Values kursidagi "bu yerda xato bo'lishi mumkin emas, bo'lsa panic qiling" andazasi: agar naqshning o'zi noto'g'ri yozilgan bo'lsa, bu dasturchining xatosi, ishga tushirish vaqtidagi muammo emas). FindAllStringSubmatch(html, -1) barcha mos kelishlarni topadi (-1 — cheksiz son), har biri ikkita elementli slice: to'liq moslik va qavs ichidagi guruh (([^"]+) — qo'shtirnoq ichidagi URL'ning o'zi).

>_ Exercise

FetchPage(pages map[string]string, url string) (string, error) funksiyasini yozing — berilgan pages map'idan URL'ning HTML mazmunini qaytaradi, topilmasa xato beradi. ExtractLinks(html string) []string funksiyasini yozing — berilgan linkPattern yordamida barcha href havolalarini topib qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Fetcher va link extractor — crawler'ning ikkita eng asosiy qismi: biri ma'lumotni oladi, ikkinchisi undan navbatdagi qadamlarni (havolalarni) chiqarib oladi. regexp paketi HTML kabi yarim-strukturaviy matndan naqsh bo'yicha ma'lumot ajratib olishning standart vositasi.

NEXT UP

Tracking Visited URLs