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

Thu thập dữ liệu từ web với Selenium và Python
Gỡ mã nguồn trang web với Selenium và Python | Giải Captcha khi gỡ mã nguồn trang web

Trong bài viết này, bạn sẽ làm quen với trích xuất dữ liệu từ web bằng Selenium và Python, và học cách giải mã Captcha liên quan đến quy trình để trích xuất dữ liệu hiệu quả.

web scraping
Logo of CapSolver

Aloísio Vítor

04-Dec-2025

Web Scraping bằng Golang với Colly
Thu thập dữ liệu từ web trong Golang với Colly

Trong bài viết này, chúng tôi khám phá thế giới của việc trích xuất dữ liệu web bằng Golang với thư viện Colly. Hướng dẫn bắt đầu bằng việc giúp bạn thiết lập dự án Golang và cài đặt gói Colly. Sau đó, chúng tôi hướng dẫn từng bước tạo một công cụ trích xuất cơ bản để trích xuất liên kết từ một trang Wikipedia, minh họa tính dễ sử dụng và tính năng mạnh mẽ của Colly.

web scraping
Logo of CapSolver

Aloísio Vítor

04-Dec-2025

Web Scraping là gì?
Web Scraping là gì | Các trường hợp sử dụng phổ biến và vấn đề

Tìm hiểu về web scraping: học về lợi ích của nó, giải quyết các thách thức một cách dễ dàng, và nâng cao doanh nghiệp của bạn với CapSolver.

web scraping
Logo of CapSolver

Emma Foster

03-Dec-2025

Puppeteer là gì?
What là puppeteer và cách sử dụng trong việc thu thập dữ liệu web | Hướng dẫn hoàn chỉnh 2026

Hướng dẫn đầy đủ này sẽ đi sâu vào việc Puppeteer là gì và cách sử dụng nó hiệu quả trong web scraping.

web scraping
Logo of CapSolver

Aloísio Vítor

03-Dec-2025

Cách tạo công cụ thu thập dữ liệu từ web bằng trí tuệ nhân tạo (Hướng dẫn dành cho người mới bắt đầu)
Cách tạo một trình thu thập dữ liệu web cho AI Agent (Bài hướng dẫn dành cho người mới bắt đầu)

Học cách tạo một trình thu thập dữ liệu AI từ đầu với hướng dẫn dễ hiểu cho người mới. Khám phá các thành phần cốt lõi, ví dụ mã code và cách vượt qua các biện pháp chống bot như CAPTCHAs để thu thập dữ liệu đáng tin cậy.

web scraping
Logo of CapSolver

Anh Tuan

02-Dec-2025

Công cụ Trí tuệ nhân tạo bỏ chặn web để quét dữ liệu web
Công cụ Trí tuệ nhân tạo để bỏ chặn web trích xuất dữ liệu | Giải Captcha tự động

AI Web Unlocker tự động hóa việc giải CAPTCHA để truy xuất dữ liệu từ web mượt mà, không gián đoạn và truy cập dữ liệu đáng tin cậy.

web scraping
Logo of CapSolver

Anh Tuan

24-Nov-2025