Cách sử dụng geziyor để Scrape Web

Emma Foster
Machine Learning Engineer
27-Sep-2024
Geziyor: Khung web scraping mạnh mẽ cho Go
Geziyor là một khung web scraping hiện đại cho Go, được thiết kế để cung cấp các công cụ mạnh mẽ cho việc scraping các trang web và trích xuất dữ liệu một cách hiệu quả. Không giống như nhiều thư viện scraping truyền thống, Geziyor nhấn mạnh sự dễ sử dụng đồng thời cung cấp các luồng công việc scraping có thể tùy chỉnh cao.
Các tính năng chính:
- Hỗ trợ đồng thời: Nó hỗ trợ các hoạt động bất đồng bộ, cho phép bạn scraping nhiều trang đồng thời, điều này giúp tăng hiệu suất.
- Tùy chỉnh yêu cầu: Dễ dàng sửa đổi các yêu cầu HTTP, bao gồm tiêu đề, cookie và các tham số tùy chỉnh.
- Điều tiết tự động: Giúp tránh kích hoạt các cơ chế chống scraping bằng cách điều chỉnh tốc độ các yêu cầu gửi đến máy chủ.
- Lưu trữ cache và lưu trữ tích hợp: Nó hỗ trợ lưu trữ cache dữ liệu đã scraping và các phản hồi để tránh các yêu cầu trùng lặp.
- Khả năng mở rộng: Cung cấp các móc để mở rộng chức năng hoặc xử lý các sự kiện như chặn yêu cầu/phản hồi, middleware tùy chỉnh, và hơn thế nữa.
- Hỗ trợ proxy: Dễ dàng tích hợp proxy để luân phiên IP hoặc bỏ qua các hạn chế.
Điều kiện tiên quyết
Để sử dụng Geziyor, hãy đảm bảo bạn có:
- Go 1.12+ được cài đặt từ trang web chính thức của Go.
- Kiến thức cơ bản về ngôn ngữ Go.
Cài đặt
Để cài đặt Geziyor, bạn có thể chạy:
bash
go get -u github.com/geziyor/geziyor
Ví dụ cơ bản: Web scraping với Geziyor
Đây là một ví dụ đơn giản để scraping một trang web và in các tiêu đề của bài viết:
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"github.com/PuerkitoBio/goquery"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://news.ycombinator.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find(".storylink").Each(func(i int, s *goquery.Selection) {
log.Println(s.Text())
})
},
}).Start()
}
Ví dụ nâng cao: Scraping với tiêu đề tùy chỉnh và yêu cầu POST
Đôi khi, bạn cần mô phỏng tương tác phức tạp hơn với máy chủ, chẳng hạn như đăng nhập hoặc tương tác với các trang web động. Trong ví dụ này, chúng tôi sẽ trình bày cách gửi tiêu đề tùy chỉnh và yêu cầu POST.
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
Method: "POST",
URL: "https://httpbin.org/post",
Body: []byte(`{"username": "test", "password": "123"}`),
Headers: map[string]string{
"Content-Type": "application/json",
},
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
Xử lý cookie và phiên trong Geziyor
Bạn có thể cần quản lý cookie hoặc duy trì phiên trong quá trình scraping. Geziyor đơn giản hóa việc quản lý cookie bằng cách tự động xử lý cookie cho mỗi yêu cầu, và bạn cũng có thể tùy chỉnh quy trình xử lý cookie nếu cần.
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/cookies/set?name=value",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Cookies:", r.Cookies())
},
}).Start()
}
Sử dụng proxy với Geziyor
Để scraping một trang web trong khi tránh các hạn chế hoặc chặn IP, bạn có thể định tuyến các yêu cầu của mình thông qua một proxy. Đây là cách cấu hình hỗ trợ proxy với Geziyor:
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/ip",
Proxy: "http://username:password@proxyserver:8080",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
Xử lý Captcha với Geziyor
Mặc dù Geziyor không giải quyết captcha một cách bản địa, bạn có thể tích hợp nó với dịch vụ giải quyết captcha như CapSolver. Đây là cách bạn có thể sử dụng CapSolver để giải quyết captcha kết hợp với Geziyor.
Ví dụ: Giải quyết ReCaptcha V2 bằng Geziyor và CapSolver
Đầu tiên, bạn cần tích hợp CapSolver và xử lý các yêu cầu đối với các thách thức captcha.
go
package main
import (
"encoding/json"
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
"time"
)
const CAPSOLVER_KEY = "YourKey"
func createTask(url, key string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"task": map[string]interface{}{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": url,
"websiteKey": key,
},
}
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/createTask").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
return result["taskId"].(string), nil
}
func getTaskResult(taskId string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"taskId": taskId,
}
for {
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/getTaskResult").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
if result["status"] == "ready" {
return result["solution"].(string), nil
}
time.Sleep(5 * time.Second)
}
}
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
taskId, _ := createTask("https://example.com", "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf")
solution, _ := getTaskResult(taskId)
g.Do(&client.Request{
Method: "POST",
URL: "https://example.com/submit",
Body: []byte(`g-recaptcha-response=` + solution),
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Captcha Solved:", string(r.Body))
},
}).Start()
}
Tối ưu hóa hiệu suất với Geziyor
Geziyor rất giỏi trong việc xử lý các tác vụ scraping khối lượng lớn, nhưng hiệu suất có thể được tối ưu hóa hơn bằng cách điều chỉnh một số tùy chọn:
- Đồng thời: Tăng
ConcurrentRequestsđể cho phép nhiều yêu cầu song song. - Độ trễ yêu cầu: Áp dụng độ trễ giữa các yêu cầu để tránh bị phát hiện.
Ví dụ với đồng thời và độ trễ:
go
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://example.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {},
ConcurrentRequests: 10,
RequestDelay: 2,
}).Start()
}
Mã thưởng
Nhận Mã thưởng của bạn cho các giải pháp captcha hàng đầu tại CapSolver: scrape. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn số lần.

Kết luận
Geziyor là một khung web scraping mạnh mẽ, nhanh chóng và linh hoạt cho Go, là lựa chọn tuyệt vời cho các nhà phát triển muốn xây dựng hệ thống scraping có khả năng mở rộng. Hỗ trợ tích hợp cho đồng thời, yêu cầu có thể tùy chỉnh và khả năng tích hợp với các dịch vụ bên ngoài như CapSolver làm cho nó trở thành công cụ lý tưởng cho cả tác vụ scraping đơn giản và nâng cao.
Cho dù bạn đang thu thập dữ liệu từ blog, trang web thương mại điện tử hay xây dựng đường ống scraping tùy chỉnh, Geziyor có các tính năng bạn cần để bắt đầu nhanh chóng và hiệu quả.
Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.
Thêm

Tiện ích tốt nhất để giải CAPTCHA 2026 là gì?
Trong thế giới an ninh trực tuyến không ngừng phát triển, các thách thức CAPTCHA đã trở thành rào cản phổ biến đối với người dùng internet...

Ethan Collins
12-Dec-2025

Genlogin: Đổi mới Trải nghiệm Tự động hóa Web
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Genlogin là gì và các dịch vụ mà họ cung cấp.

Rajinder Singh
12-Dec-2025

Proxys.io: Proxy riêng lẻ cho bất kỳ nhiệm vụ nào
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Proxys.io là gì và các dịch vụ mà họ cung cấp.

Lucas Mitchell
12-Dec-2025

Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

Anh Tuan
12-Dec-2025

IP2World Proxy Nhà Ở: Giải pháp IP proxy toàn cầu hàng đầu
Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn IP2World là gì và các dịch vụ mà họ cung cấp.

Ethan Collins
12-Dec-2025

Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện
Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

Lucas Mitchell
12-Dec-2025

