Go İle Web Crawler Yapalım

Suppressor

Request Uzmanı
16 Kas 2022
1,204
713
always, everywhere
6kjk1mb.png


Selamlar! Yakın zamanda Go ile web Crawler geliştirdim. Umarım size yardımcı olur. Kodun açıklamaları yorum satırı olarak yanlarında var.
Git:
package main

//  Gerekli kütüphanleri ekler
import (
    "bufio"
    "fmt"
    "net/http"
    "os"
    "strings"

    "github.com/PuerkitoBio/goquery"
)

var foundLinks = make(map[string]bool)

func makeRequest(url string) *goquery.Document {
    response, err := http.Get(url) // Belirtilen URL'ye bir HTTP GET isteği yapar.
    if err != nil {
        fmt.Println("Error making request:", err)
        return nil
    }
    defer response.Body.Close()

    doc, err := goquery.NewDocumentFromReader(response.Body) // Yanıttan bir goquery belgesi oluşturur.
    if err != nil {
        fmt.Println("Error parsing response body:", err)
        return nil
    }
    return doc
}

func crawl(url string) {
    doc := makeRequest(url) // Belirtilen URL için bir HTTP isteği yapar.
    if doc == nil {
        return
    }
    doc.Find("a").Each(func(i int, s *goquery.Selection) { // Tüm <a> etiketlerini seçer ve her biri üzerinde işlem yapar.
        foundLink, _ := s.Attr("href") // Her bir <a> etiketinin href özniteliğini alır.
        if foundLink != "" { // Boş bir bağlantı değilse işlem yapar.
            if strings.Contains(foundLink, "#") { // Bağlantı içinde "#" karakteri varsa bunu kaldırır.
                foundLink = strings.Split(foundLink, "#")[0]
            }
            if strings.Contains(foundLink, url) && !foundLinks[foundLink] { // Bağlantı, ana URL'yi içeriyor ve daha önce ziyaret edilmediyse işlem yapar.
                foundLinks[foundLink] = true // Bağlantının ziyaret edildiğini işaretler.
                fmt.Println(foundLink) // Bağlantıyı yazdırır.
               
                crawl(foundLink)
            }
        }
    })
}

func main() {
    reader := bufio.NewReader(os.Stdin) // Kullanıcıdan giriş almak için bir input oluşturur.
    fmt.Print("Enter target URL: ")
    targetURL, _ := reader.ReadString('\n') // Kullanıcıdan bir URL alır.
    targetURL = strings.TrimSpace(targetURL) // Alınan URL'yi temizler.
    crawl(targetURL) // Belirtilen URL üzerinde tarayıcıyı başlatır.
}


 
Son düzenleme:

QuatrexDefacer

Black Hat Junior
15 Eki 2022
585
351
Baku
6kjk1mb.png


Selamlar! Yakın zamanda Go ile web Crawler geliştirdim. Umarım size yardımcı olur. Kodun açıklamaları yorum satırı olarak yanlarında var.
Git:
package main

//  Gerekli kütüphanleri ekler
import (
    "bufio"
    "fmt"
    "net/http"
    "os"
    "strings"

    "github.com/PuerkitoBio/goquery"
)

var foundLinks = make(map[string]bool)

func makeRequest(url string) *goquery.Document {
    response, err := http.Get(url) // Belirtilen URL'ye bir HTTP GET isteği yapar.
    if err != nil {
        fmt.Println("Error making request:", err)
        return nil
    }
    defer response.Body.Close()

    doc, err := goquery.NewDocumentFromReader(response.Body) // Yanıttan bir goquery belgesi oluşturur.
    if err != nil {
        fmt.Println("Error parsing response body:", err)
        return nil
    }
    return doc
}

func crawl(url string) {
    doc := makeRequest(url) // Belirtilen URL için bir HTTP isteği yapar.
    if doc == nil {
        return
    }
    doc.Find("a").Each(func(i int, s *goquery.Selection) { // Tüm <a> etiketlerini seçer ve her biri üzerinde işlem yapar.
        foundLink, _ := s.Attr("href") // Her bir <a> etiketinin href özniteliğini alır.
        if foundLink != "" { // Boş bir bağlantı değilse işlem yapar.
            if strings.Contains(foundLink, "#") { // Bağlantı içinde "#" karakteri varsa bunu kaldırır.
                foundLink = strings.Split(foundLink, "#")[0]
            }
            if strings.Contains(foundLink, url) && !foundLinks[foundLink] { // Bağlantı, ana URL'yi içeriyor ve daha önce ziyaret edilmediyse işlem yapar.
                foundLinks[foundLink] = true // Bağlantının ziyaret edildiğini işaretler.
                fmt.Println(foundLink) // Bağlantıyı yazdırır.
              
                crawl(foundLink)
            }
        }
    })
}

func main() {
    reader := bufio.NewReader(os.Stdin) // Kullanıcıdan giriş almak için bir input oluşturur.
    fmt.Print("Enter target URL: ")
    targetURL, _ := reader.ReadString('\n') // Kullanıcıdan bir URL alır.
    targetURL = strings.TrimSpace(targetURL) // Alınan URL'yi temizler.
    crawl(targetURL) // Belirtilen URL üzerinde tarayıcıyı başlatır.
}


Eline sağlık.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.