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
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:
- HTTP İsteklerinin Yapılması.
- Seçicileri ve yer belirleyicileri kullanma gerekli verileri almak için.
- 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
İlgili konular
- Programlama
- Web Geliştirme
- Programlama
Yazar hakkında
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.
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