{wcademy}

Веб-парсер на Go

October 06, 2020

Это простой веб-парсер, который использует goquery, для удобного обращения в html-элементам с синтаксисом, похожим на JQuery. Метод Find возвращает объекты, соответствующие переданному в него классу, id или любому другому css-селектору. В примере мы получим последние заголовки с сайта wcademy.ru.

В примере происходит сбор заголовков исключительно с переданной страницы, если потребуется собирать данные с нескольких страниц, то можете расширить парсер, чтобы после сбора заголовков, он находил все теги a и для каждого из них снова вызывал сбор заголовков.

package main

import (
	"fmt"
	"log"
	"net/http"

	"github.com/PuerkitoBio/goquery"
)

func main() {
	titles, err := GetTexts("https://wcademy.ru", "h3 > a")
	if err != nil {
		log.Println(err)
	}

	fmt.Println("Последние заголовки:")
	for _, t := range titles {
		fmt.Println("-", t)
	}
}

// GetTexts возвращает текстовое представление элементов
// по selector на странице c переданным url
func GetTexts(url, selector string) ([]string, error) {

	// Скачиваем html-страницу
	resp, err := http.Get(url)
	if err != nil {
		return nil, err
	}

	// Считываем страницу в goquery-документ
	doc, err := goquery.NewDocumentFromReader(resp.Body)
	if err != nil {
		return nil, err
	}

	// Находим все элементы с переданным селектором
	// и сохраняем их содержимое в список
	var texts []string
	doc.Find(selector).Each(func(i int, s *goquery.Selection) {
		texts = append(texts, s.Text())
	})

	return texts, nil
}

Пример запуска:

пример запуска веб-скраппера на go

🚀  Если узнал из статьи что-то полезное, ставь лайк и подписывайся на наш канал в Телеграм или группу ВК. Обсудить статью можно в нашем уютном чатике 😏

© 2019 - 2022, {wcademy}