CAPSOLVER
Blog
Gỡ dữ liệu từ web trong Go với Colly

Thu thập dữ liệu từ web trong Golang với Colly

Logo of CapSolver

Aloísio Vítor

Image Processing Expert

04-Dec-2025

Web scraping là một phương pháp được sử dụng để trích xuất dữ liệu từ các trang web. Trong Golang, thư viện Colly là một công cụ phổ biến để web scraping nhờ vào tính đơn giản và tính năng mạnh mẽ. Hướng dẫn này sẽ dẫn bạn qua việc thiết lập một dự án Golang với Colly, xây dựng một trình trích xuất cơ bản, xử lý các tình huống trích xuất dữ liệu phức tạp và tối ưu trình trích xuất của bạn với các yêu cầu đồng thời.

Thiết lập Dự án Golang của bạn

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt Go trên hệ thống của mình. Khởi tạo dự án của bạn và tải về gói Colly với các lệnh sau:

bash Copy
go mod init my_scraper
go get -u github.com/gocolly/colly

Điều này thiết lập thư mục dự án của bạn và cài đặt gói Colly.

Nhận Mã Khuyến Mãi CapSolver

Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã khuyến mãi CAPN khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% khuyến mãi cho mỗi lần nạp — không giới hạn.
Nhận mã khuyến mãi ngay bây giờ trong Bảng điều khiển CapSolver
.

Xây dựng Trình Trích Xuất Cơ Bản

Hãy tạo một trình trích xuất cơ bản để trích xuất tất cả các liên kết từ một trang Wikipedia cụ thể.

  1. Tạo một tệp mới main.go và thêm mã sau:
go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector(
        colly.AllowedDomains("en.wikipedia.org"),
    )

    c.OnHTML(".mw-parser-output", func(e *colly.HTMLElement) {
        links := e.ChildAttrs("a", "href")
        fmt.Println(links)
    })

    c.Visit("https://en.wikipedia.org/wiki/Web_scraping")
}

Mã này khởi tạo một bộ thu thập Colly bị giới hạn bởi en.wikipedia.org, sau đó thiết lập một hàm gọi lại để tìm và in tất cả các liên kết bên trong phần div .mw-parser-output của trang.

Trích xuất Dữ Liệu Bảng

Đối với các nhiệm vụ phức tạp hơn như trích xuất dữ liệu bảng và ghi nó vào tệp CSV, bạn có thể sử dụng gói encoding/csv trong Go:

  1. Mở rộng main.go với mã sau để trích xuất dữ liệu bảng:
go Copy
package main

import (
    "encoding/csv"
    "log"
    "os"
    "github.com/gocolly/colly"
)

func main() {
    fName := "data.csv"
    file, err := os.Create(fName)
    if err != nil {
        log.Fatalf("Could not create file, err: %q", err)
        return
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    c := colly.NewCollector()

    c.OnHTML("table.wikitable", func(e *colly.HTMLElement) {
        e.ForEach("tr", func(_ int, row *colly.HTMLElement) {
            rowData := []string{}
            row.ForEach("td", func(_ int, cell *colly.HTMLElement) {
                rowData = append(rowData, cell.Text)
            })
            writer.Write(rowData)
        })
    })

    c.Visit("https://en.wikipedia.org/wiki/List_of_programming_languages")
}

Mã này trích xuất dữ liệu bảng từ một trang Wikipedia và ghi nó vào tệp data.csv.

Thực Hiện Yêu Cầu Đồng Thời

Để tăng tốc độ trích xuất, bạn có thể thực hiện các yêu cầu đồng thời bằng cách sử dụng goroutines của Go. Dưới đây là cách bạn có thể trích xuất nhiều trang đồng thời:

go Copy
package main

import (
    "fmt"
    "github.com/gocolly/colly"
    "sync"
)

func scrape(url string, wg *sync.WaitGroup) {
    defer wg.Done()
    
    c := colly.NewCollector()
    
    c.OnHTML("title", func(e *colly.HTMLElement) {
        fmt.Println("Title found:", e.Text)
    })
    
    c.Visit(url)
}

func main() {
    var wg sync.WaitGroup
    urls := []string{
        "https://en.wikipedia.org/wiki/Web_scraping",
        "https://en.wikipedia.org/wiki/Data_mining",
        "https://en.wikipedia.org/wiki/Screen_scraping",
    }

    for _, url := range urls {
        wg.Add(1)
        go scrape(url, &wg)
    }

    wg.Wait()
}

Trong ví dụ này, chúng ta định nghĩa một hàm scrape nhận một URL và một nhóm chờ như các tham số. Hàm này khởi tạo một bộ thu thập Colly, thiết lập một hàm gọi lại để in tiêu đề của trang, và truy cập URL. Hàm main tạo một nhóm chờ, lặp qua danh sách các URL và khởi chạy một goroutine cho mỗi URL để trích xuất dữ liệu đồng thời.

Bằng cách tuân theo các bước này, bạn có thể xây dựng các trình trích xuất mạnh mẽ trong Golang sử dụng Colly, xử lý nhiều tình huống trích xuất dữ liệu khác nhau và tối ưu hiệu suất với các yêu cầu đồng thời. Để có các hướng dẫn chi tiết hơn và sử dụng nâng cao, hãy kiểm tra các tài nguyên về web scraping với Go và Colly.

Các Thư Viện Trích Xuất Web Khác Cho Go

Ngoài Colly, có một số thư viện tuyệt vời khác cho web scraping trong Golang:

  • GoQuery: Thư viện này cung cấp cú pháp và tính năng tương tự như jQuery, cho phép bạn thực hiện các thao tác trích xuất web dễ dàng, giống như bạn làm trong jQuery.
  • Ferret: Một hệ thống trích xuất web di động, mở rộng và nhanh chóng được thiết kế để đơn giản hóa việc trích xuất dữ liệu từ web. Ferret tập trung vào việc trích xuất dữ liệu bằng một ngôn ngữ khai báo độc đáo.
  • Selenium: Được biết đến với khả năng trình duyệt không đầu, Selenium lý tưởng cho việc trích xuất nội dung động. Mặc dù không có hỗ trợ chính thức cho Go, nhưng có một phiên bản được port để sử dụng trong các dự án Go.

Kết Luận

Web scraping là kỹ năng mạnh mẽ và thiết yếu để trích xuất dữ liệu hiệu quả từ các trang web. Sử dụng Golang và thư viện Colly, bạn có thể xây dựng các trình trích xuất mạnh mẽ có thể xử lý nhiều tình huống trích xuất dữ liệu, từ việc thu thập các liên kết đơn giản đến trích xuất dữ liệu bảng phức tạp và tối ưu hiệu suất với các yêu cầu đồng thời.

Trong hướng dẫn này, bạn đã học cách:

  1. Thiết lập một dự án Golang với thư viện Colly.
  2. Xây dựng một trình trích xuất cơ bản để trích xuất các liên kết từ một trang web.
  3. Xử lý các tình huống trích xuất dữ liệu phức tạp hơn, như trích xuất dữ liệu bảng và ghi nó vào tệp CSV.
  4. Tối ưu trình trích xuất của bạn bằng cách thực hiện các yêu cầu đồng thời.

Bằng cách tuân theo các bước này, bạn có thể tạo ra các trình trích xuất web hiệu quả và hiệu quả trong Golang, tận dụng tính đơn giản và tính năng mạnh mẽ của Colly. Để sử dụng nâng cao và hướng dẫn chi tiết hơn, hãy khám phá các tài nguyên bổ sung về web scraping với Go và Colly.

Câu hỏi Thường Gặp

1. Colly có phù hợp với người mới học web scraping trong Golang không?

Có. Colly được thiết kế để đơn giản và thân thiện với người mới, đồng thời vẫn cung cấp các tính năng mạnh mẽ như phân tích DOM, xử lý yêu cầu, hàm gọi lại và tính đồng thời. Người mới phát triển Go có thể nhanh chóng xây dựng một trình trích xuất hoạt động chỉ với vài dòng mã.


2. Colly có thể trích xuất nội dung có cấu trúc như bảng hoặc danh sách không?

Tuyệt đối. Colly cho phép chọn các nút HTML cụ thể và thuộc tính, điều này giúp việc trích xuất bảng, danh sách, liên kết và các phần tử có cấu trúc khác trở nên dễ dàng. Bạn cũng có thể lưu kết quả trực tiếp vào các tệp như CSV hoặc JSON bằng các thư viện chuẩn của Go.


3. Làm thế nào để tăng tốc trình trích xuất web của tôi bằng Colly?

Bạn có thể sử dụng goroutines của Go để xử lý nhiều trang cùng lúc. Bằng cách khởi chạy các trình trích xuất đồng thời và đồng bộ chúng bằng một nhóm chờ, hiệu suất trích xuất tăng lên đáng kể — đặc biệt là đối với các tập dữ liệu lớn hoặc các nhiệm vụ quét nhiều URL.

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

Giải Captcha trong Nanobot bằng CapSolver
Cách giải CAPTCHA trên Nanobot bằng CapSolver

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.

web scraping
Logo of CapSolver

Anh Tuan

26-Feb-2026

Dịch vụ dữ liệu (DaaS): Nó là gì và tại sao nó quan trọng vào năm 2026
Dữ liệu dưới dạng dịch vụ (DaaS): Nó là gì và tại sao nó quan trọng vào năm 2026

Hiểu về Dịch vụ Dữ liệu (DaaS) vào năm 2026. Khám phá lợi ích, trường hợp sử dụng và cách nó thay đổi doanh nghiệp với phân tích thời gian thực và tính mở rộng.

web scraping
Logo of CapSolver

Emma Foster

12-Feb-2026

Cách sửa lỗi gỡ mã web phổ biến vào năm 2026
Cách sửa các lỗi thu thập dữ liệu web phổ biến vào năm 2026

Nắm vững việc sửa chữa các lỗi trình gỡ mã web đa dạng như 400, 401, 402, 403, 429, 5xx, và Cloudflare 1001 vào năm 2026. Học các chiến lược tiên tiến về chuyển đổi IP, tiêu đề, và giới hạn tốc độ thích ứng với CapSolver.

web scraping
Logo of CapSolver

Nikolai Smirnov

05-Feb-2026

Làm thế nào để giải quyết bảo vệ Cloudflare khi quét web
Cách khắc phục bảo vệ Cloudflare khi quét web

Học cách giải quyết bảo vệ Cloudflare khi quét dữ liệu web. Khám phá các phương pháp đã được chứng minh như xoay đổi IP, tinh vân TLS và CapSolver để xử lý các thách thức.

web scraping
Logo of CapSolver

Nikolai Smirnov

05-Feb-2026

RoxyBrowser với tích hợp CapSolver
Cách giải Captcha trong RoxyBrowser với tích hợp CapSolver

Tích hợp CapSolver với RoxyBrowser để tự động hóa các nhiệm vụ trình duyệt và vượt qua reCAPTCHA, Turnstile và các CAPTCHA khác.

web scraping
Logo of CapSolver

Anh Tuan

04-Feb-2026

AI Tính liên quan với CapSolver
Cách giải reCAPTCHA v2 trong Relevance AI với tích hợp CapSolver

Xây dựng một công cụ AI của Relevance để giải quyết reCAPTCHA v2 bằng CapSolver. Tự động hóa việc gửi biểu mẫu qua API mà không cần tự động hóa trình duyệt.

web scraping
Logo of CapSolver

Anh Tuan

03-Feb-2026