Как сделать парсинг веб-страниц на языке Go с использованием фреймворка Colly?
Сначала создаем проект, как указано в официальной документации Go.
Открываем наш любимый редактор кода и создаем файл main.go. Затем в терминале VS Code или в терминале операционной системы в директории проекта запускаем команду go get -u github.com/gocolly/colly/...
для установки фреймворка Colly. Если у вас возникнут проблемы во время установки, вы можете посетить http://go-colly.org/ и https://github.com/gocolly/colly, чтобы получить дополнительную информацию.
В нашем приложении мы хотим только одно - получить таблицу результатов Суперлиги с сайта TFF. Для этого вам потребуется базовое понимание HTML-тегов. Если вы раньше использовали селекторы CSS, то это будет для вас игра детства. Теперь давайте начнем писать код.
Создаем новый коллектор с помощью команды _c := colly.NewCollector(colly.AllowedDomains())
. В этом приложении нам достаточно одного коллектора, поэтому мы не будем добавлять дополнительные. Однако, если вам понадобится в вашем проекте, вы можете создать коллекторы c2, c3, c4 и т. д., как создаете экземпляры структурного типа.
При использовании фреймворка Colly вы обязательно столкнетесь с обратными вызовами (callbacks). Эта структура, похожая на жизненный цикл Android, лучше всего объясняется в официальной документации...
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL)
})
c.OnError(func(_ *colly.Response, err error) {
log.Println("Something went wrong:", err)
})
c.OnResponseHeaders(func(r *colly.Response) {
fmt.Println("Visited", r.Request.URL)
})
c.OnResponse(func(r *colly.Response) {
fmt.Println("Visited", r.Request.URL)
})
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnHTML("tr td:nth-of-type(1)", func(e *colly.HTMLElement) {
fmt.Println("First column of a table row:", e.Text)
})
c.OnXML("//h1", func(e *colly.XMLElement) {
fmt.Println(e.Text)
})
c.OnScraped(func(r *colly.Response) {
fmt.Println("Finished", r.Request.URL)
})
Порядок вызова обратных вызовов
1. OnRequest
Вызывается перед запросом
2. OnError
Вызывается, если произошла ошибка во время запроса
3. OnResponseHeaders
Вызывается после получения заголовков ответа
4. OnResponse
Вызывается после получения ответа
5. OnHTML
Вызывается сразу после OnResponse
, если полученный контент является HTML
6. OnXML
Вызывается сразу после OnHTML
, если полученный контент является HTML или XML
7. OnScraped
Вызывается после обратных вызовов OnXML