Код IT
← Каталог

Практикум GoHTMLParser — Файл main.go (финальная версия)

Фрагмент из «Практикум GoHTMLParser»: Файл main.go (финальная версия).

Go main.go
package main

import (
	"flag"
	"fmt"
	"log"
	"os"

	"gohtmlparser/internal/fetch"
	"gohtmlparser/internal/parse"
)

func main() {
	url := flag.String("url", "", "URL страницы для парсинга (обязательный)")
	tag := flag.String("tag", "h2", "HTML-тег для извлечения: h1, h2, h3, a и т.д.")
	flag.Parse()

	if *url == "" {
		fmt.Println("Парсер веб-страниц — извлекает данные из HTML.")
		fmt.Println()
		fmt.Println("Использование:")
		fmt.Println("  go run . -url <адрес> [-tag <тег>]")
		fmt.Println()
		fmt.Println("Примеры:")
		fmt.Println("  go run . -url https://example.com -tag h1")
		fmt.Println("  go run . -url https://news.ycombinator.com -tag a")
		os.Exit(1)
	}

	log.Printf("Скачиваем страницу: %s", *url)
	htmlContent, err := fetch.HTML(*url)
	if err != nil {
		log.Fatalf("Ошибка загрузки: %v", err)
	}
	log.Printf("Загружено %d байт", len(htmlContent))

	log.Printf("Ищем элементы <%s>...", *tag)
	items, err := parse.ExtractByTag(htmlContent, *tag)
	if err != nil {
		log.Fatalf("Ошибка парсинга: %v", err)
	}

	if len(items) == 0 {
		log.Printf("Элементы <%s> не найдены.", *tag)
		return
	}

	fmt.Printf("\nНайдено %d элементов <%s>:\n\n", len(items), *tag)
	for i, item := range items {
		fmt.Printf("%d. %s\n", i+1, item)
	}
}
package main

import (
	"flag"
	"fmt"
	"log"
	"os"

	"gohtmlparser/internal/fetch"
	"gohtmlparser/internal/parse"
)

func main() {
	url := flag.String("url", "", "URL страницы для парсинга (обязательный)")
	tag := flag.String("tag", "h2", "HTML-тег для извлечения: h1, h2, h3, a и т.д.")
	flag.Parse()

	if *url == "" {
		fmt.Println("Парсер веб-страниц — извлекает данные из HTML.")
		fmt.Println()
		fmt.Println("Использование:")
		fmt.Println("  go run . -url <адрес> [-tag <тег>]")
		fmt.Println()
		fmt.Println("Примеры:")
		fmt.Println("  go run . -url https://example.com -tag h1")
		fmt.Println("  go run . -url https://news.ycombinator.com -tag a")
		os.Exit(1)
	}

	log.Printf("Скачиваем страницу: %s", *url)
	htmlContent, err := fetch.HTML(*url)
	if err != nil {
		log.Fatalf("Ошибка загрузки: %v", err)
	}
	log.Printf("Загружено %d байт", len(htmlContent))

	log.Printf("Ищем элементы <%s>...", *tag)
	items, err := parse.ExtractByTag(htmlContent, *tag)
	if err != nil {
		log.Fatalf("Ошибка парсинга: %v", err)
	}

	if len(items) == 0 {
		log.Printf("Элементы <%s> не найдены.", *tag)
		return
	}

	fmt.Printf("\nНайдено %d элементов <%s>:\n\n", len(items), *tag)
	for i, item := range items {
		fmt.Printf("%d. %s\n", i+1, item)
	}
}