Як використовувати Geziyor для вебскрапінгу?
У цьому посібнику я проведу вас через налаштування Geziyor, використання його для вебскрапінгу даних і навіть експорт цих даних у CSV-файл. Наприкінці ви будете готові зануритися у вебскрапінг за допомогою Geziyor!
Що таке Geziyor?
Geziyor — це GolangФреймворк на базі Go, створений спеціально для вебскрапінгу та краулінгу. Він призначений для розробників, які хочуть витягувати дані з вебсайтів без ручної обробки HTTP-запитів, парсингу HTML або проблем із конкурентним виконанням. Geziyor використовує goroutines у Go для обробки паралельних запитів, даючи змогу ефективно скрапити кілька вебсторінок одночасно. Також він містить вбудовані можливості для керування кукі, кешування вмісту та експорту даних у різні формати.
Навіщо використовувати Geziyor?
Geziyor має кілька переваг, які роблять його привабливим вибором для вебскрапінгу:
- Concurrent Scraping: Geziyor спрощує процес скрапінгу кількох сторінок одночасно завдяки goroutines у Go.
- Easy HTML Parsing: Geziyor використовує вбудований HTML-парсер, який підтримує CSS-селектори, що дає змогу легко витягувати дані з HTML-елементів.
- Customizable: Ви можете налаштувати фреймворк під свої потреби, додавши власну логіку для конкретних завдань вебскрапінгу.
- Data Export: Geziyor підтримує автоматичний експорт даних у різні формати, зокрема CSV і JSON.
- Кеш і керування сесіями: Geziyor пропонує кешування контенту та керування сесіями, щоб ефективніше обробляти повторний вебскрапінг.
Тепер заглибмося в те, як використовувати Geziyor для вебскрапінгу даних із вебсайтів.
Налаштування Geziyor для вебскрапінгу
Перш ніж почати вебскрапінг сайтів за допомогою Geziyor, потрібно налаштувати середовище. Geziyor вимагає Go 1.22 або новішої версії, тож переконайтеся, що у вас встановлено найновішу версію Go. Завантажити її можна з офіційного Сайт Go.
Крок 1: Створіть Go-проєкт
Відкрийте термінал і створіть новий каталог для вашого проєкту вебскрапінгу. Перейдіть до цього каталогу та ініціалізуйте Go-проєкт.
mkdir my_scraper
cd my_scraper
go mod init scraper
Крок 2: Встановіть Geziyor
Щоб використовувати Geziyor у своєму проєкті, потрібно встановити його за допомогою команди go get:
go get -u github.com/geziyor/geziyor
Ця команда завантажить і встановить фреймворк Geziyor у ваш проєкт.
Крок 3: Створіть код вебскрапера
Once Geziyor is installed, create a new file called scraper.go in your project directory. This file will contain the code for scraping the target website.
Крок 4: Виконайте свій перший запит, щоб отримати HTML
To begin, let’s create a simple scraper that makes an HTTP request to a website and prints out the raw HTML content of the page. In your scraper.go file, add the following code:
package main
import (
"fmt"
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://www.example.com"},
ParseFunc: scraper,
RobotsTxtDisabled: true,
}).Start()
}
func scraper(g *geziyor.Geziyor, r *client.Response) {
fmt.Println("HTML-вміст:", r.HTMLDoc.Text())
}
У цьому коді:
- StartURLs визначає URL, який потрібно скрапити.
- ParseFunc — це функція, яка обробляє HTML-вміст, повернений запитом.
- RobotsTxtDisabled: true tells Geziyor to ignore robots.txt files, which are often used to block web crawlers.
Запустіть цей код, виконавши таку команду в терміналі:
go Запустіть вебскрапер.go
Це завантажить HTML-вміст сторінки та виведе його в терміналі.
Крок 5: Витягніть конкретні дані з HTML
Тепер, коли ви знаєте, як отримати повний HTML-вміст, давайте витягнемо з сторінки конкретні дані. Припустімо, що ви хочете отримати назви товарів і ціни з інтернет-магазину.
Щоб витягувати конкретні дані, використовуйте CSS-селектори. Давайте змінимо функцію вебскрапера, щоб витягувати назви та ціни товарів. Ось приклад:
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://www.example.com/products"},
ParseFunc: scraper,
RobotsTxtDisabled: true,
}).Start()
}
func scraper(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find("div.product").Each(func(i int, s *goquery.Selection) {
name := s.Find("h2.product-name").Text()
price := s.Find("span.product-price").Text()
fmt.Println("Товар:", name, "Price:", price)
})
}
У цьому коді:
- Ми використовуємо пакет goquery, щоб розібрати HTML.
- Функція Find із CSS-селектором дає змогу витягувати назву та ціну кожного товару на сторінці.
Крок 6: Експортуйте дані до CSV-файлу
Geziyor також дає змогу легко експортувати зібрані дані у файл CSV. Давайте змінимо вебскрапер так, щоб зберігати витягнуті дані про товари у файл CSV.
Спочатку імпортуйте модуль geziyor/export, а потім додайте опцію Exporters до об’єкта Geziyor:
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"github.com/geziyor/geziyor/export"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://www.example.com/products"},
ParseFunc: scraper,
RobotsTxtDisabled: true,
Exporters: []export.Exporter{
&export.CSV{FileName: "products.csv"},
},
}).Start()
}
func scraper(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find("div.product").Each(func(i int, s *goquery.Selection) {
name := s.Find("h2.product-name").Text()
price := s.Find("span.product-price").Text()
g.Exports <- map[string]interface{}{
"Name": name,
"Price": price,
}
})
}
Here:
- The CSV exporter writes the extracted product data to a file called products.csv in the root directory of your project.
- Назва та ціна кожного товару записуються до CSV-файлу.
Крок 7: Обробка пагінації та збір даних із кількох сторінок
Багато сайтів мають кілька сторінок вмісту, які потрібно вебскрапити. Geziyor спрощує перехід за посиланнями пагінації та вебскрапінг кількох сторінок.
Let’s modify the scraper function to follow the “Next” button on the page, which usually links to the next set of products. Here’s how you can implement pagination:
func scraper(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find("div.product").Each(func(i int, s *goquery.Selection) {
name := s.Find("h2.product-name").Text()
price := s.Find("span.product-price").Text()
g.Exports <- map[string]interface{}{
"Name": name,
"Price": price,
}
})
// Follow the "Next" button link
if href, ok := r.HTMLDoc.Find("a.next").Attr("href"); ok {
g.Get(r.JoinURL(href), scraper)
}
}
In this code, after scraping the current page, Geziyor checks if there is a “Next” button (a.next). If the button exists, it follows the link to the next page and continues scraping.
Крок 8: Обробка сторінок, згенерованих JavaScript
Деякі сайти використовують JavaScript для динамічного завантаження вмісту. Geziyor не підтримує рендеринг JavaScript за замовчуванням, але ви можете використати функцію GetRendered, щоб дочекатися, поки JavaScript завантажить вміст.
Ось приклад того, як виконати вебскрапінг сторінки, що рендериться JavaScript:
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: requestFunc,
ParseFunc: scraper,
RequestDelay: 10,
}).Start()
}
func requestFunc(g *geziyor.Geziyor) {
g.GetRendered("https://www.example.com/javascript-page", g.Opt.ParseFunc)
}
func scraper(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find("div.product-info").Each(func(i int, s *goquery.Selection) {
fmt.Println("Товар:", s.Find(".product-name").Text(), "Price:", s.Find(".product-price").Text())
})
}
У цьому коді:
GetRendered очікує, поки JavaScript-вміст завантажиться, перш ніж продовжити вебскрапінг.
Щоб ще більше підвищити надійність вашого вебскрапінгу, розгляньте можливість інтеграції резидентські проксі Bright Data У свій робочий процес Geziyor. Ці проксі можуть допомогти обійти антиботові заходи та забезпечити швидке, безперервне витягування даних навіть із найскладніших сайтів. Цікавлять інші провайдери? Переглянь мій список найкращі резидентські проксі.
Conclusion
Geziyor — це потужний і простий у використанні фреймворк для вебскрапінгу в Golang. Завдяки його можливостям паралельного вебскрапінгу, простому API та вбудованим розбір HTML, ви можете швидко все налаштувати й почати вебскрапити дані з сайтів. Ви також можете експортувати дані у форматах на кшталт CSV і JSON та виконувати складні завдання, такі як pagination та рендеринг JavaScript. Якщо ви працюєте з Go і вам потрібне швидке, масштабоване рішення для вебскрапінгу, Geziyor однозначно варто розглянути.

