Web veri çıkarma olarak da bilinen web kazıma, web sayfalarından veri veya içerik çıkarmanın otomatik bir yöntemidir.

Web kazıyıcıları, insan müdahalesi olmadan veri çıkarmayı otomatikleştirir. Bir kazıyıcı, bir web tarayıcısının yaptığı gibi, HTTP istekleri göndererek bir web sayfasına erişir. Ancak, getirdiği HTML'yi görüntülemek yerine, talimatlarınıza göre işler ve sonucu saklar.

Web kazıyıcıları, API sağlamayan web sitelerinden veri almak için kullanışlıdır. Veri bilimi, siber güvenlik, ön uç ve arka uç geliştirme gibi alanlarda popülerdirler.

Go'da Web Kazıma

Go'da çeşitli web kazıma paketleri vardır. Popüler olanlar arasında goquery, Colly ve ChromeDP bulunur.

ChromeDP, selenyum benzeri bir web sürücüsü paketidir. Bağımlılık olmadan Go'da Chrome geliştirici araçları protokolünü destekler.

Colly, goquery kullanılarak oluşturulmuş web kazımaya özel bir kitaplıktır. Ancak goquery, Go'daki web sitelerini kazımak için daha hızlı bir seçenektir.

goquery nedir?

CSS kitaplığı, jQuery, ilham vermeye yardımcı oldu

instagram viewer
goquery. dayalı bir Go kitaplığıdır. net/html HTML5 uyumlu bir belirteç ve ayrıştırıcı uygulayan paket. Ayrıca, net/html tarafından sağlanan ayrıştırıcı ile kullanım için CSS seçicilerini uygulayan Cascadia paketini de kullanır.

Goquery'yi yükleme

Goquery'yi yüklemek için aşağıdaki komutu terminalinizde çalıştırın. Herhangi bir hatayla karşılaşırsanız, Go sürümünüzü güncellemeyi deneyin.

Git github.com/PuerkitoBio/goquery'yi edinin

Web Kazıma Süreci

Genel kazıma sürecini üç küçük göreve bölebilirsiniz:

  1. HTTP İsteklerinin Yapılması.
  2. Seçicileri ve yer belirleyicileri kullanma gerekli verileri almak için.
  3. Daha sonraki işlemler için verileri bir veritabanına veya veri yapılarına kaydetme.

Go'da HTTP İstekleri Yapma

kullanarak HTTP istekleri gönderebilirsiniz. net/http Go standart kitaplığının içerdiği paket.

paket ana

içe aktarmak "net/http"
içe aktarmak "kayıt"
içe aktarmak "fmt"

işlevana() {
webUrl := "https://news.ycombinator.com/"
yanıt, hata:= http. Al (webUrl)

Eğer hata != sıfır {
kayıt. Fatalln (hata)
} başkaEğer tepki. DurumKodu == 200 {
fmt. Println("Bunu kazıyabiliriz")
} başka {
kayıt. Fatalln("Bunu kazımayın")
}
}

http. Almak bir yanıt gövdesi ve bir hata döndürür. tepki. Durum kodu istek-yanıt durum kodudur.

HTTP istekleri yaparken, eğer yanıt durum kodu dır-dir 200 web sitesini kazımaya devam edebilirsiniz.

Goquery Kullanarak Gerekli Verileri Alma

Web Sitesi HTML'sini Alma

İlk olarak, yanıttan düz HTML'yi ayrıştırmanız gerekir (yanıt. vücut) web sayfasını temsil eden eksiksiz bir belge nesnesi almak için:

belge, err := goquery. NewDocumentFromReader (yanıt. Gövde)

Eğer hata != sıfır {
kayıt. Fatalln (hata)
}

Artık web sayfasının içerdiği yapıya ve içeriğe erişmek için belge nesnesini kullanabilirsiniz.

HTML'den Gerekli Öğeleri Seçme

Çıkarmanız gereken verilerin yapısını kontrol etmek için web sayfasını incelemeniz gerekecektir. Bu, ona erişmek için bir seçici oluşturmanıza yardımcı olacaktır.

Seçicileri ve konumlandırıcıları kullanarak, ihtiyacınız olan HTML'yi aşağıdakileri kullanarak çıkarabilirsiniz. Bulmak belge nesnesinin yöntemi.

bu Bulmak yöntemi, ihtiyacınız olan verileri içeren öğeyi bulmak için bir CSS seçicisi kullanır:

belge. Bul("tr.şey")

Yukarıdaki kod, yalnızca seçiciyle eşleşen ilk HTML öğesini veya eşleşme yoksa boş bir liste döndürür.

HTML'den Birden Çok Öğe Seçme

Çoğu zaman, seçicinizle eşleşen tüm HTML öğelerini getirmek isteyeceksiniz.

HTML'deki eşleşen tüm öğeleri aşağıdakileri kullanarak seçebilirsiniz. Her biri değer yöntemi Bulmak() İadeler. bu Her biri yöntem, iki parametreli bir işlevi alır: bir dizin ve bir tür seçicisi *goquery. seçim.

belge. Find("tr.athing").Her(işlev(dizin int, seçici *goquery. Seçim) {
/* Burada işlem seçici */
})

İşlev gövdesinde, HTML'den istediğiniz belirli verileri seçebilirsiniz. Bu durumda, sayfanın listelediği her gönderinin bağlantılarına ve başlıklarına ihtiyacınız vardır. Kullan Bulmak Öğe kümesini daraltmak ve metin veya öznitelik değerlerini çıkarmak için seçici parametrenin yöntemi.

belge. Find("tr.athing").Her(işlev(dizin int, seçici *goquery. Seçim) {
başlık := seçici. Bul("td.title").Text()
bağlantı, bulundu := seçici. Find("a.titlelink").Attr("href")
})

Yukarıdaki kod şunu çağırır: Metin sonucun yöntemi seçici. Bulmak bir tablo hücresinin içeriğini çıkarmak için. Bağlantı ve resim URL'leri gibi öznitelikleri seçmek, öznitelik yöntem. Bu yöntem ayrıca özniteliğin var olup olmadığını gösteren bir değer döndürür.

İşlem, bir web sayfasından herhangi bir öğeyi ve özniteliği seçmek için aynıdır.

bu Bulmak yöntemi çok güçlüdür ve HTML öğelerini seçmek ve bulmak için çok çeşitli işlemlere izin verir. Bunları goquery belgelerinde keşfedebilirsiniz.

Kazılan Verileri Kaydetme

Bağlantı niteliği ve başlığı, değişkenlere atayabileceğiniz dizelerdir. Gerçek senaryolarda, manipülasyon için bir veritabanına veya veri yapısına kaydedeceksiniz. Çoğu zaman, basit bir özel yapı yeterli olacaktır.

Alanlarla bir yapı oluşturun başlık ve bağlantı ve yapı türünü tutmak için bir yapı dilimi.

tip Bilgi yapı {
bağlantı sicim
Başlık sicim
}
bilgi := Yapmak([]Bilgi, 0)

Yapıyı ve dilimi oluşturduktan sonra, belge yöntemi işlevinin gövdesinde, Find yöntemine ilettiğiniz işlevdeki dilimi doldurun. Her biri bir sonuç içeren yeni veri yapılarının örneğini oluşturmak için yapı türünü kullanın.

bilgi = eklemek(bilgi, Bilgi{
başlık: başlık,
bağlantı: bağlantı,
})

Bu tür ekler Bilgi(yapı) için bilgi(dilim) verileri istediğiniz gibi değiştirebilirsiniz.

Dilimin yazdırılması, web sitesini başarıyla kazıdığınızı ve dilimi doldurduğunuzu gösterir.

fmt. Println (bilgi)

Web sayfasının sunucusuna gereğinden fazla çarpmamak için kazınmış verileri yerel bir önbelleğe kaydetmek mantıklıdır. Bu, yalnızca trafiği azaltmakla kalmayacak, aynı zamanda yerel verileri almak, istekte bulunmaktan ve web sitelerini kazımaktan daha hızlı olduğu için uygulamanızı hızlandıracaktır.

Go'da verileri kaydetmek için kullanabileceğiniz birçok veritabanı paketi vardır. bu veritabanı/sql paketi SQL veritabanlarını destekler. gibi NoSQL veritabanı istemcileri de vardır. MongoDB Git sürücüsüve FaunaDB gibi sunucusuz veritabanlarını kullanarak FaunaDB sürücüsü.

Go'da Web Kazımanın Özü

Bir web sitesinden verileri sıyırmaya çalışıyorsanız, goquery başlamak için mükemmel bir yerdir. Ancak, web kazıma işleminden daha fazlasını yapabilen güçlü bir pakettir. Resmi proje belgelerinde işlevselliği hakkında daha fazla bilgi edinebilirsiniz.

Web kazıma, çeşitli teknoloji alanlarında önemli bir beceridir ve birçok projenizde kullanışlı olacaktır.

Go'da Nesne Yönelimli Programlama Kavramları Nasıl Uygulanır?

Sonrakini Oku

PaylaşmakCıvıldamakPaylaşmakE-posta

İlgili konular

  • Programlama
  • Web Geliştirme
  • Programlama

Yazar hakkında

Ukeje Chukwuemeriwo İyilik (3 Makale Yayınlandı)

Goodness, bu büyüleyici alanı keşfederken çeşitli teknoloji konularını basitleştiren teknik bir yazar, arka uç geliştiricisi ve veri analistidir.

Ukeje Chukwuemeriwo Goodness'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın