Membuat Web Crawling Googlebot dengan Colly di FreBSD 14
· 2 min read · Label UnixBSD
Perayapan web (web crawling) adalah teknik yang memungkinkan Anda memeriksa, mengurai, dan mengekstrak data yang mungkin sulit diakses dari blog atau situs web. Perayapan web dilakukan secara sistematis, dimulai dengan URL "seed", dan secara rekursif mengunjungi tautan yang ditemukan perayap pada setiap halaman yang dikunjungi.
Pustaka Colly adalah paket Go yang dapat digunakan untuk membuat scraper web dan perayap web. Cara kerjanya didasarkan pada net/HTTP Go (untuk komunikasi jaringan) dan goquery (yang memungkinkan Anda menggunakan sintaksis "mirip jQuery" untuk menargetkan elemen HTML).
Dengan Colly, Anda dapat dengan mudah mengekstrak data terstruktur dari blogsite atau Aplikasi Web. Anda dapat menggunakan data ini untuk berbagai aplikasi, seperti penambangan data, pemrosesan data, atau pengarsipan data.
Fitur Utama Colly:
Dalam artikel ini, kita akan menggunakan bahasa pemrograman Go, bahasa skrip populer dari Google, dan salah satu paket yang akan kita gunakan adalah Colly. Membuat perayap di Go dan Colly mudah saja. Dalam artikel ini, saya akan menunjukkan cara membuat skrip dasar yang dapat memeriksa kesehatan tautan, label, dan gambar di seluruh situs web. Saya juga akan membagikan beberapa hal yang akan membantu Anda membuat perayap profesional.
Kita akan membuat direktori baru untuk menyimpan semua proyek yang akan kita kerjakan dengan Colly.
Anda telah berhasil membuat file scraper bernama "/usr/local/etc/colly/crawlingblogsite.go". Anda dapat melihat isi file "/usr/local/etc/colly/crawlingblogsite.go" di bawah ini.
Colly memberi kita sejumlah callback yang dapat diatur atau tidak. Callback ini akan dipanggil pada berbagai tahap dalam pekerjaan crawl, dan kita harus memutuskan mana yang akan dipilih berdasarkan kebutuhan kita. Berikut ini adalah daftar semua callback dan urutan pemanggilannya.
Lanjutkan dengan perintah berikut.
Untuk menjalankan perayap web, kita harus menambahkan beberapa "flags".
Atau, sebagai cara praktis, Anda dapat mengunduh repositori Colly Web Crawler dari Github.
Sekarang Anda memiliki perayap web sendiri, dan siap digunakan kapan saja. Lakukan setiap hari dengan merayapi Blogsite atau situs web Anda, sehingga Googlebot dapat dengan cepat mengindeks URL di blogsite kita.
Pustaka Colly adalah paket Go yang dapat digunakan untuk membuat scraper web dan perayap web. Cara kerjanya didasarkan pada net/HTTP Go (untuk komunikasi jaringan) dan goquery (yang memungkinkan Anda menggunakan sintaksis "mirip jQuery" untuk menargetkan elemen HTML).
Dengan Colly, Anda dapat dengan mudah mengekstrak data terstruktur dari blogsite atau Aplikasi Web. Anda dapat menggunakan data ini untuk berbagai aplikasi, seperti penambangan data, pemrosesan data, atau pengarsipan data.
Fitur Utama Colly:
* Clean API
* Google App Engine support
* Fast (capable of performing >1k requests/second on a single core)
* Manages request delays and maximum concurrency per domain
* Sync/async/parallel scraping
* Distributed scraping
*Can cache data
* Automatic encoding of non-unicode responses
* Robots.txt support
* Automatic cookie and session handling
* Configuration via environment variables
* Extensions
1. Cara Instal Colly
Karena pustaka Colly berjalan dalam bahasa GO, maka sebagai langkah awal kita menginstal aplikasi GO terlebih dahulu. Untuk mempercepat proses instalasi, Anda dapat menggunakan paket PKG FreeBSD.root@ns7:~ # pkg install go
Sekarang saatnya kita menginstal Colly, untuk mendapatkan pustaka Colly yang lengkap kita cukup menggunakan sistem Port FreeBSD.
root@ns7:~ # cd /usr/ports/www/colly
root@ns7:/usr/ports/www/colly # make install clean
root@ns7:/usr/ports/www/colly # mkdir -p /usr/local/etc/colly
root@ns7:/usr/ports/www/colly # cd /usr/local/etc/colly
Untuk membuat scraper baru, kita dapat menggunakan perintah di bawah ini.root@ns7:/usr/local/etc/colly # colly new crawlingblogsite.go
root@ns7:/usr/local/etc/colly # ls
crawlingblogsite.go
package main
import (
"log"
"github.com/gocolly/colly/v2"
)
func main() {
c := colly.NewCollector()
c.Visit("https://yourdomain.com/")
}
Ubah nama domain ke domain Anda sendiri, misalnya "https://www.unixwinbsd.site".
2. Colly Web Crawler
Entitas utama Colly ada dalam struktur Collector. Collector melacak setiap halaman yang diantrekan untuk dikunjungi, mengelola komunikasi jaringan, dan bertanggung jawab untuk menjalankan callback terlampir saat halaman sedang di-scraping.Colly memberi kita sejumlah callback yang dapat diatur atau tidak. Callback ini akan dipanggil pada berbagai tahap dalam pekerjaan crawl, dan kita harus memutuskan mana yang akan dipilih berdasarkan kebutuhan kita. Berikut ini adalah daftar semua callback dan urutan pemanggilannya.
- OnResponse(f ResponseCallback) - Called after response received.
- OnRequest(f RequestCallback) - Called before a request.
- OnXML(xpathQuery string, f XMLCallback) - Called right after OnHTML if the received content is HTML or XML.
- OnError(f ErrorCallback) - Called if error occured during the request.
- OnHTML(goquerySelector string, f HTMLCallback) - Called right after OnResponse if the received content is HTML.
- OnScraped(f ScrapedCallback) - Called after OnXML callbacks.
Baiklah, mari kita mulai membuat web crawler dengan Colly. Langkah pertama adalah mengedit file "/usr/local/etc/colly/crawlingblogsite.go", lalu kita hapus semua isinya, lalu tambahkan skrip di bawah ini ke dalam file tersebut.
package main
import (
"flag"
"fmt"
"net/url"
"os"
"regexp"
"time"
"github.com/gocolly/colly"
_ "go.uber.org/automaxprocs"
)
var (
domain, header string
parallelism, delay, sleep int
daemon bool
)
func init() {
flag.StringVar(&domain, "domain", "", "Set url for crawling. Example: https://example.com")
flag.IntVar(¶llelism, "parallelism", 2, "Parallelism is the number of the maximum allowed concurrent requests of the matching domains")
flag.IntVar(&delay, "delay", 1, "Delay is the duration to wait before creating a new request to the matching domains")
flag.BoolVar(&daemon, "daemon", false, "Run crawler on daemon mode")
flag.IntVar(&sleep, "sleep", 60, "Time in seconds to wait before run crawler again")
flag.StringVar(&header, "header", "", "Set header for crawler request. Example: header_name:header_value")
}
func crawler() {
u, err := url.Parse(domain)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
// Instantiate default collector
c := colly.NewCollector(
// Turn on asynchronous requests
colly.Async(true),
// Visit only domain
colly.AllowedDomains(u.Host),
)
// Limit the number of threads
c.Limit(&colly.LimitRule{
DomainGlob: u.Host,
Parallelism: parallelism,
Delay: time.Duration(delay) * time.Second,
})
// On every a element which has href attribute call callback
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
link := e.Attr("href")
// Visit link found on page
// Only those links are visited which are in AllowedDomains
c.Visit(e.Request.AbsoluteURL(link))
})
if len(header) > 0 {
c.OnRequest(func(r *colly.Request) {
reg := regexp.MustCompile(`(.*):(.*)`)
headerName := reg.ReplaceAllString(header, "${1}")
headerValue := reg.ReplaceAllString(header, "${2}")
r.Headers.Set(headerName, headerValue)
})
}
c.OnResponse(func(r *colly.Response) {
fmt.Println(r.Request.URL, "\t", r.StatusCode)
})
c.OnError(func(r *colly.Response, err error) {
fmt.Println(r.Request.URL, "\t", r.StatusCode, "\nError:", err)
})
fmt.Print("Started crawler\n")
// Start scraping
c.Visit(domain)
// Wait until threads are finished
c.Wait()
}
func main() {
flag.Parse()
if len(domain) == 0 {
fmt.Fprintf(os.Stderr, "Flag -domain required\n")
os.Exit(1)
}
if daemon {
for {
crawler()
fmt.Printf("Sleep %v seconds before run crawler again\n", sleep)
time.Sleep(time.Duration(sleep) * time.Second)
}
} else {
crawler()
}
}
root@ns7:/usr/local/etc/colly # go mod colly
root@ns7:/usr/local/etc/colly # go get go.uber.org/automaxprocs
root@ns7:/usr/local/etc/colly # go get github.com/gocolly/colly
- daemon: Jalankan perayap pada mode daemon.
- delay int: Durasi menunggu sebelum membuat permintaan baru ke domain yang cocok (default 1).
- domain string: Tetapkan url untuk perayapan. Contoh: https://example.com.
- header string: Tetapkan header untuk permintaan perayap. Contoh: header_name:header_value.
- parallelism int: Paralelisme adalah jumlah maksimum permintaan serentak yang diizinkan dari domain yang cocok (default 2).
- sleep int: Waktu dalam detik untuk menunggu sebelum menjalankan perayap lagi (default 60).
Contoh penggunaan:
root@ns7:/usr/local/etc/colly # go run crawlingblogsite.go -domain https://www.unixwinbsd.site -header header_name:header_value -daemon
root@ns7:~/.cache/pypoetry/index # git clone https://github.com/unixwinbsd/CollyWebCrawling.git
Silahkan Berkomentar, Kakak...! Bunda...!
Posting Komentar