CAPSOLVER
Blog
Cách sử dụng geziyor để trích xuất dữ liệu từ web

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

Logo of CapSolver

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ó:

Cài đặt

Để cài đặt Geziyor, bạn có thể chạy:

bash Copy
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 Copy
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 Copy
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()
}

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 Copy
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 Copy
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 Copy
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 Copy
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

phần mở rộng tốt nhất để giải CAPTCHA 2026
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...

Extension
Logo of CapSolver

Ethan Collins

12-Dec-2025

Đăng nhập Gen
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.

Partners
Logo of CapSolver

Rajinder Singh

12-Dec-2025

ProxysIO
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.

Partners
Logo of CapSolver

Lucas Mitchell

12-Dec-2025

Tabproxy
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.

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

IP2Thế giới
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.

Partners
Logo of CapSolver

Ethan Collins

12-Dec-2025

lỗi trích xuất dữ liệu từ web
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.

web scraping
Logo of CapSolver

Lucas Mitchell

12-Dec-2025