Веб-скрапинг, также известный как извлечение веб-данных, представляет собой автоматизированный метод извлечения данных или контента с веб-страниц.
Веб-скрейперы автоматизируют извлечение данных без вмешательства человека. Парсер получает доступ к веб-странице, отправляя HTTP-запросы, как это делает веб-браузер. Однако вместо того, чтобы отображать полученный HTML-код, он обрабатывает его в соответствии с вашими инструкциями и сохраняет результат.
Веб-скраперы пригодятся для получения данных с веб-сайтов, которые не предоставляют API. Они популярны в таких областях, как наука о данных, кибербезопасность, разработка интерфейсов и серверных частей.
Веб-скрейпинг в Go
В Go есть различные пакеты веб-скрейпинга. Популярные включают goquery, Colly и ChromeDP.
ChromeDP — это пакет веб-драйверов, похожий на селен. Он поддерживает протокол инструментов разработчика Chrome в Go без зависимостей.
Colly — это библиотека для парсинга веб-страниц, созданная с использованием goquery. Но goquery — более быстрый вариант для парсинга веб-сайтов в Go.
Что такое гокери?
Библиотека CSS, jQuery, помогла вдохновить Гокери. Это библиотека Go, основанная на сеть/html package, который реализует совместимый с HTML5 токенизатор и парсер. Он также использует пакет Cascadia, который реализует селекторы CSS для использования с парсером, предоставляемым net/html.
Установка goquery
Запустите приведенную ниже команду в своем терминале, чтобы установить goquery. Если вы столкнулись с какими-либо ошибками, попробуйте обновить версию Go.
идти получить github.com/PuerkitoBio/goquery
Процесс парсинга веб-страниц
Весь процесс парсинга можно разделить на три более мелкие задачи:
- Выполнение HTTP-запросов.
- Использование селекторов и локаторов для получения необходимых данных.
- Сохранение данных в базе данных или структурах данных для дальнейшей обработки.
Выполнение 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
Читать далее
Похожие темы
- Программирование
- Веб-разработка
- Программирование
Об авторе
Гуднесс — технический писатель, бэкэнд-разработчик и аналитик данных, который упрощает различные технологические темы, исследуя эту захватывающую область.
Подпишитесь на нашу рассылку
Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!
Нажмите здесь, чтобы подписаться