Colly في Go: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Colly في Go: دليل شامل لاستخراج بيانات الويب

1. ما هي مكتبة Colly ولماذا تحتاجها؟

Colly هي مكتبة قوية وعالية الأداء لاستخراج بيانات الويب (Web Scraping) بلغة Go. توفر واجهة نظيفة، غير متزامنة، وقابلة للتوسع بسهولة لاستخراج البيانات من مواقع الويب. تم بناء Colly على أساس حزمتي net/http و goquery (المشابهة لـ jQuery في Go)، مما يسمح للمطورين باستخدام صيغة محددات CSS المألوفة للتنقل في مستندات HTML.

لماذا تحتاج هذه المكتبة؟ في عالم اليوم، البيانات هي النفط الجديد. يتيح لك استخراج الويب أتمتة جمع المعلومات: مراقبة أسعار المنافسين، جمع الأخبار، تحليل مقاييس SEO، إنشاء قواعد بيانات للمنتجات، وغير ذلك الكثير. تبرز Colly عن الحلول الأخرى بفضل سرعتها (بنية غير متزامنة تعتمد على Goroutines)، والدعم المدمج للتخزين المؤقت، والإدارة التلقائية للتأخير (لامتثال سياسات المواقع)، ونظام الاستدعاءات (Callbacks) المرن.

المكتبة مثالية لكل من البرامج النصية الصغيرة وأنظمة جمع البيانات الموزعة الكبيرة. بفضل الكتابة الصارمة في Go وعدم وجود بيئة تشغيل (على عكس Python/Node.js)، يتم تجميع تطبيقات Colly في ملف ثنائي واحد، مما يبسط النشر والتوسع.

2. التثبيت

لتثبيت Colly، استخدم مدير الحزم القياسي في Go. تأكد من أن لديك Go الإصدار 1.18 أو أحدث.

go get -u github.com/gocolly/colly/v2

بعد تنفيذ الأمر، ستتم إضافة المكتبة إلى ملف go.mod الخاص بك. يُنصح أيضًا بتثبيت goquery للعمل مع HTML (سيتم سحبه تلقائيًا كتبعية):

go get -u github.com/PuerkitoBio/goquery

3. بداية سريعة: مثال بسيط

لننشئ أداة استخراج بسيطة تعرض العناوين (وسوم <h1>) من الصفحة الرئيسية لموقع example.com.

package main

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

func main() {
    // إنشاء جامع جديد
    c := colly.NewCollector()

    // معالج للصفحات التي تمت زيارتها
    c.OnHTML("h1", func(e *colly.HTMLElement) {
        fmt.Println("العنوان:", e.Text)
    })

    // معالج الأخطاء
    c.OnError(func(r *colly.Response, err error) {
        fmt.Println("خطأ:", err)
    })

    // بدء عملية الاستخراج
    c.Visit("https://example.com")
}

قم بتشغيل الكود باستخدام الأمر go run main.go. سترى عنوان الصفحة. هذا هو الأساس الذي يمكنك البناء عليه.

4. أهم الأساليب والوظائف (8 على الأقل)

دعنا نستعرض الأساليب الرئيسية في Colly التي تغطي 90% من مهام استخراج الويب.

4.1 colly.NewCollector()

التوقيع: func NewCollector(options ...func(*Collector)) *Collector

الوظيفة: تنشئ مثيلاً جديداً من الجامع (Collector) - الكائن الرئيسي لإدارة عملية الاستخراج. يقبل دوال إعداد اختيارية.

// إنشاء مع إعدادات
c := colly.NewCollector(
    colly.AllowedDomains("example.com"), // السماح فقط بـ example.com
    colly.CacheDir("./cache"),           // تخزين الطلبات مؤقتاً
)

4.2 Collector.Visit()

التوقيع: func (c *Collector) Visit(URL string) error

الوظيفة: تبدأ طلب HTTP GET إلى عنوان URL المحدد. هذه هي نقطة الدخول لعملية الاستخراج.

err := c.Visit("https://exa                    

توصيات