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

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

Веб-скраперы пригодятся для получения данных с веб-сайтов, которые не предоставляют API. Они популярны в таких областях, как наука о данных, кибербезопасность, разработка интерфейсов и серверных частей.

Веб-скрейпинг в Go

В Go есть различные пакеты веб-скрейпинга. Популярные включают goquery, Colly и ChromeDP.

ChromeDP — это пакет веб-драйверов, похожий на селен. Он поддерживает протокол инструментов разработчика Chrome в Go без зависимостей.

Colly — это библиотека для парсинга веб-страниц, созданная с использованием goquery. Но goquery — более быстрый вариант для парсинга веб-сайтов в Go.

instagram viewer

Что такое гокери?

Библиотека CSS, jQuery, помогла вдохновить Гокери. Это библиотека Go, основанная на сеть/html package, который реализует совместимый с HTML5 токенизатор и парсер. Он также использует пакет Cascadia, который реализует селекторы CSS для использования с парсером, предоставляемым net/html.

Установка goquery

Запустите приведенную ниже команду в своем терминале, чтобы установить goquery. Если вы столкнулись с какими-либо ошибками, попробуйте обновить версию Go.

идти получить github.com/PuerkitoBio/goquery

Процесс парсинга веб-страниц

Весь процесс парсинга можно разделить на три более мелкие задачи:

  1. Выполнение HTTP-запросов.
  2. Использование селекторов и локаторов для получения необходимых данных.
  3. Сохранение данных в базе данных или структурах данных для дальнейшей обработки.

Выполнение HTTP-запросов в Go

Вы можете отправлять HTTP-запросы, используя сеть/http package, который входит в стандартную библиотеку Go.

упаковка главный

импорт "сеть/http"
импорт "журнал"
импорт "ФМТ"

функцияглавный() {
веб-адрес := "https://news.ycombinator.com/"
ответ, ошибка:= http. Получить (веб-адрес)

если ошибся != ноль {
журнал. Fatalln (ошибка)
} ещеесли отклик. СтатусКод == 200 {
ФМТ. Println("Мы можем очистить это")
} еще {
журнал. Fatalln("Не очищайте это")
}
}

http. Получить возвращает тело ответа и ошибку. отклик. Код состояния код состояния запроса-ответа.

При выполнении HTTP-запросов, если код состояния ответа является 200 вы можете приступить к очистке сайта.

Получение необходимых данных с помощью goquery

Получение HTML-кода веб-сайта

Во-первых, вам нужно разобрать простой HTML-код из ответа (ответ.тело), чтобы получить полный объект документа, представляющий веб-страницу:

документ, ошибка := goquery. NewDocumentFromReader (ответ. Тело)

если ошибся != ноль {
журнал. Fatalln (ошибка)
}

Теперь вы можете использовать объект документа для доступа к структуре и содержимому веб-страницы.

Выбор необходимых элементов из HTML

Вам нужно будет проверить веб-страницу, чтобы проверить структуру данных, которые необходимо извлечь. Это поможет вам создать селектор для доступа к нему.

Используя селекторы и локаторы, вы можете извлечь нужный HTML-код, используя Находить метод объекта документа.

Находить Метод использует селектор CSS для поиска элемента, содержащего необходимые данные:

документ. Найти("tr.athing")

Приведенный выше код возвращает только первый элемент HTML, соответствующий селектору, или пустой список, если совпадения не было вообще.

Выбор нескольких элементов из HTML

В большинстве случаев вам нужно получить все HTML-элементы, соответствующие вашему селектору.

Вы можете выбрать все соответствующие элементы в HTML, используя Каждый метод значения, которое Находить() возвращается. Каждый метод принимает функцию с двумя параметрами: индексом и селектором типа *гокери. Выбор.

документ. Найти("tr.athing").Каждый(функция(показатель инт, селектор *goquery. Выбор) {
/* Селектор процессов здесь */
})

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

документ. Найти("tr.athing").Каждый(функция(показатель инт, селектор *goquery. Выбор) {
заголовок := селектор. Найти("td.title").Текст()
ссылка, найдено := селектор. Найти("a.titlelink").Атрибут("href")
})

Приведенный выше код вызывает Текст метод результата от селектор. Находить для извлечения содержимого ячейки таблицы. Для выбора атрибутов, таких как URL-адреса ссылок и изображений, необходимо использовать Атрибут метод. Этот метод также возвращает значение, указывающее, существует ли вообще атрибут.

Процесс такой же, как и при выборе любых элементов и атрибутов на веб-странице.

Находить очень мощный метод, позволяющий выполнять широкий спектр операций по выбору и расположению HTML-элементов. Вы можете изучить их в документации goquery.

Сохранение очищенных данных

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

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

тип Информация структура {
связь нить
заглавие нить
}
информация := делать([]Информация, 0)

После создания структуры и среза в теле функции метода документа заполните срез в функции, которую вы передаете методу Find. Используйте тип struct для создания экземпляров новых структур данных, каждая из которых содержит один результат.

информация = добавить(информация, информация{
название: название,
ссылка: ссылка,
})

Это добавляет типы Информация(структура) к Информация(срез), из которого вы можете манипулировать данными по своему усмотрению.

Печать фрагмента показывает, что вы успешно очистили веб-сайт и заполнили фрагмент.

ФМТ. Println (информация)

Собранные данные разумно сохранять в локальном кеше, чтобы не нагружать сервер веб-страницы больше, чем нужно. Это не только уменьшит трафик, но и ускорит ваше приложение, поскольку оно быстрее извлекает локальные данные, чем делать запросы и очищать веб-сайты.

В Go есть множество пакетов баз данных, которые можно использовать для сохранения данных. база данных/sql пакет поддерживает базы данных SQL. Существуют также клиенты базы данных NoSQL, такие как Драйвер MongoDB Goи бессерверные базы данных, такие как FaunaDB, использующие Драйвер FaunaDB.

Суть парсинга веб-страниц в Go

Если вы пытаетесь собрать данные с веб-сайта, goquery — отличное место для начала. Но это мощный пакет, который может делать больше, чем просто просмотр веб-страниц. Подробнее о его функционале вы можете узнать в официальной документации проекта.

Веб-скрапинг — важный навык в различных областях технологий, и он пригодится во многих ваших проектах.

Как реализовать концепции объектно-ориентированного программирования в Go

Читать далее

ДелитьсяТвитнутьДелитьсяЭл. адрес

Похожие темы

  • Программирование
  • Веб-разработка
  • Программирование

Об авторе

Укедже Чуквуэмериво Доброта (опубликовано 3 статьи)

Гуднесс — технический писатель, бэкэнд-разработчик и аналитик данных, который упрощает различные технологические темы, исследуя эту захватывающую область.

Еще от Ukeje Chukwuemeriwo Goodness

Подпишитесь на нашу рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться