Веб-парсер на 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
}
Пример запуска:
🚀 Если узнал из статьи что-то полезное, ставь лайк и подписывайся на наш канал в Телеграм или группу ВК. Обсудить статью можно в нашем уютном чатике 😏