Парсинг Сайта Кинотеатра С Помощью Golang

Всем привет, в этой статье мы рассмотрим небольшой пример кода, написанного для сбора данных с сайта на популярном сегодня языке программирования Go. Эта статья будет особенно интересна тем, кто много слышал о Го, но еще не пробовал его на себе.

Для одного из наших внутренних проектов нам нужно было собрать данные о фильмах, которые идут в кинотеатрах, и расписаниях показов.

Теперь рассмотрим первую (самую простую) версию парсера, с которой все и началось.

Для тех, кому лень читать код статьи, сразу дам ссылку на репозиторий .

В своей первой версии парсер мог собирать только следующую информацию:

  • О показах в одном кинотеатре,
  • Подробное описание,
  • Имя,
  • Студия,
И сохраните его в JSON. Изначально вам необходимо выбрать подходящую библиотеку парсинга.

Google возвращает большое количество вариантов по запросу `golang web Scraping`, многие из них отражены в этом список , советую с ним ознакомиться, я выбрал гезийор , так как он поддерживает JS Rendering (который, кстати, мы не будем использовать в этом примере, но эта возможность может оказаться очень полезной при парсинге сайтов) и достаточно прост в использовании.

Итак, библиотека выбрана, следующий шаг — ее установить и начать использовать в коде.

Установка библиотеки предельно проста:

  
  
  
  
  
   

go get -u github.com/geziyor/geziyor

Теперь перейдем к написанию кода.

Внутри тела основной функции мы вызовем парсер, передадим ему URL страницы, с которой начнем собирать данные, и укажем, что хотим экспортировать результат в JSON-файл:

func main() { geziyor.NewGeziyor(&geziyor.Options{ StartURLs: []string{" https://kinoteatr.ru/raspisanie-kinoteatrov/city/# "}, ParseFunc: parseMovies, Exporters: []export.Exporter{&export.JSON{}}, }).

Start() }

Начало положено, но логика сбора данных отсутствует; для этого вам нужно реализовать функцию parseMovies .

Логика сбора будет следующей:

  • Найдите блок, содержащий информацию о фильме,
  • Сбор информации обо всех сессиях внутри этого блока,
  • Собирая название фильма и киностудии,
  • Собираем ссылку на страницу с подробной информацией о фильме,
  • Собираем описания с этой страницы


Перейдем к реализации этой функции

Здесь для дальнейшей обработки выбираются все блоки, содержащие информацию о фильме.



func parseMovies(g *geziyor.Geziyor, r *client.Response) { r.HTMLDoc.Find("div.shedule_movie").

Each(func(i int, s *goquery.Selection) {

Таким образом информация о сессиях собирается и сразу же преобразуется в удобную для человека форму (убираем лишние пробелы и отступы на новой строке).



var sessions = strings.Split(s.Find(".

shedule_session_time").

Text(), " \n ") sessions = sessions[:len(sessions)-1] for i := 0; i < len(sessions); i++ { sessions[i] = strings.Trim(sessions[i], "\n ") }

Этот блок кода отвечает за получение страницы с подробной информацией о фильме и получение его описания.



if href, ok := s.Find("a.gtm-ec-list-item-movie").

Attr("href"); ok { g.Get(r.JoinURL(href), func(_g *geziyor.Geziyor, _r *client.Response) { description = _r.HTMLDoc.Find("span.announce p.movie_card_description_inform").

Text() description = strings.ReplaceAll(description, "\t", "") description = strings.ReplaceAll(description, "\n", "") description = strings.TrimSpace(description)

Вот как вызывается API для экспорта результатов в файл JSON.

g.Exports <- map[string]interface{}{ "title": strings.TrimSpace(s.Find("span.movie_card_header.title").

Text()), "subtitle": strings.TrimSpace(s.Find("span.sub_title.shedule_movie_text").

Text()), "sessions": sessions, "description": description, }

Ура, все готово! Остается только объединить написанные блоки кода вместе и приступить к парсингу.

Так работает парсер, мы видим в терминале сообщения об успешном получении страниц, это удобно.



Парсинг сайта кинотеатра с помощью Golang

А вот как выглядит результат разбора.



Парсинг сайта кинотеатра с помощью Golang

Спасибо за прочтение статьи, люблю программирование на Go. Теги: #Go #golang #парсинг

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.