Veri ayrıştırma, verileri bir biçimden (örn. JSON, XML) diğerine (örn. JavaScript Object Notation) dönüştürmektir. Bu, uygulamanızda yapılandırılmış verileri depolamak istediğinizde ve çalışma zamanında nasıl görüneceğini veya neye benzeyeceğini bilmediğinizde yararlı olabilir. Ayrıştırma, aynı görev için tamamen farklı bir dil kullanmak yerine JavaScript gibi size daha tanıdık gelen bir programlama dilini kullanmanızı sağlar.
Veri ayrıştırma başka amaçlar için de kullanılır: örneğin, bir API JSON formatında veri döndürüyorsa. Yine de, programınız yalnızca XML biçimli verileri anlıyorsa, JSON'u programınızın anlayabileceği bir şeye ayrıştırmaktan başka seçeneğiniz olmaz.
Bunun en yaygın yolu, HTML belgelerini DOM öğelerine ayrıştıran ve daha sonra bu öğeleri kod tabanında kullanan jQuery adlı bir kütüphane aracılığıyla gerçekleşir. Bu, HTML/CSS/JavaScript sözdizimine aşina olmayan geliştiricilerin HTML içeriği döndüren API 'lerle çalışmasını kolaylaştırır.
Kafanız mı karıştı? O zaman sizin için açıklayalım.
Veri ayrıştırma nasıl çalışır?
Veri ayrıştırma, ham HTML içeriğini sorgulanmaya hazır bir nesne modeline ayrıştırarak çalışır. Bu işleme eşleme veya indeksleme denir. Çıktı, kaynak belge/sayfa/e-posta vb.den çıkarılan ilgili değerleriyle eşlenen tüm alanlara sahiptir.
Neden veri ayrıştırma kullanılmalı?
En yaygın kullanımlardan bazıları şunlardır: Web sitelerinden, e-postalardan ve diğer belgelerden veri ayıklama. Bu, HTML içeriğinin gerekli bilgileri almak için sorgulanabilen bir nesne modeline ayrıştırılmasıyla yapılır. Çıktı, kaynak belgeden/sayfadan/e-postadan çıkarılan değerleriyle eşlenen tüm alanlara sahip olacaktır. Ayrıca bu nesneleri sorgulamak ve gerekli bilgileri almak için yöntemler sağlar.
Bu kütüphaneler, düzenli ifadeler, XPath sorguları ve XML sözdizimini kullanarak özel sorgular yazmanıza olanak tanıyan XQuery gibi daha gelişmiş teknikler dahil olmak üzere çeşitli sorguları destekler. En yaygın kullanılan diller arasında Java, PHP, Python, C# .NET vb. yer alır.
Bugün web'de çeşitli ayrıştırıcı türleri mevcuttur; ancak hepsi benzer şekilde çalışır: giriş metnini, bu metin içinde bulduklarını temsil eden bir nesne yapısına dönüştürürler.
Nesneler ya düğümleri ya da bu düğümler (öğeler) içindeki nitelikleri temsil eder. Örneğin, içinde bazı içerikler bulunan etiketler içeren bir belgeniz varsa, her etiket ortaya çıkan yapı içinde bir nesne düğümünü temsil eder. Bunlar, söz konusu öğenin içeriğinde bulunan her şeyi temsil eder. Etiket, ana öğesi hakkında bilgi içeren bir öznitelik düğümü olarak temsil edilir.
İlerleyen bölümlerde, bugün web'de bulunan daha popüler ayrıştırıcılardan bazılarını ele alacağız.
Html ayrıştırma kütüphaneleri.
Veri ayrıştırma HTML kütüphaneleri, HTML içeriğini ayrıştırmak ve ondan veri çıkarmak için kullanılır. Web sayfalarından, belgelerden, e-postalardan veya yapılandırılmış metinlerden veri ayıklamak için kullanılırlar. Bu kütüphaneler, web sitelerinden veri kazıma, e-posta mesajlarını ayrıştırma gibi çeşitli amaçlar için kullanılabilir.
Güzel Çorba
Beautiful Soup, HTML'yi ayrıştırmak için bir Python kütüphanesidir. Kullanımı kolay ve hızlı, ancak en karmaşık belgeleri işlemek için yeterince güçlü olacak şekilde tasarlanmıştır. Beautiful Soup, dosyalar, URL'ler, e-posta mesajları ve hatta panonuz dahil olmak üzere birçok kaynaktan HTML'yi ayrıştırabilir.
HTML etiketlerinin ve niteliklerinin ayrıştırılması hızlı ancak kararlı bir şekilde yapılır. Bu, Beautiful Soup'un en karmaşık belgeleri işleyebileceği anlamına gelir.
Beautiful Soup, belgeyi manipüle etmek için basit bir API ve belgenizdeki öğelerle çalışmak için tam özellikli bir sınıf seti ile kullanımı kolay olacak şekilde tasarlanmıştır.
Cheerio
Cheerio, JavaScript Object Notation (JSON) belgelerinin ve JavaScript'in yerel ECMAScript nesne gösteriminin (ES5) veri ayrıştırmasını destekler. ES5 sözdizimini desteklemenin yanı sıra, ES6 kod bloklarındaki ok işlevleri gibi daha yeni özellikleri de destekler. Cheerio'nun API'si, kullanımı ve diğer kütüphanelerle entegrasyonu kolay olacak şekilde tasarlanmıştır. Ayrıştırılan verilere bir Java Haritası, bir ArrayList veya bir JSON nesnesi akışı olarak erişim sağlar.
JSoup
JSoup, HTML ve XML belgelerini veri ayrıştırma için bir kütüphanedir. HTML, XML, JSON, CSS dosyalarını ve DOM öğelerini ayrıştırmanıza olanak tanıyan bir API sağlar. Ayrıştırıcıyı çeşitli şekillerde kullanabilirsiniz:
- Belgeden veri ayıklama (örneğin, bir HTML sayfasından tüm bağlantıları ayıklama).
- yeni belgeler oluşturmak (örneğin, sıfırdan yeni bir XML dosyası oluşturmak veya mevcut bir HTML dosyasını eşdeğer XHTML formatına dönüştürmek).
- doğrulama amaçları (örneğin, formları girdi değerlerine göre doğrulama).
Kuklacı
Puppeteer, herhangi bir web sitesinin DOM'unu incelemenize ve değiştirmenize olanak tanıyan bir tarayıcı uzantısıdır. Şu anda Chrome, Firefox ve Opera için kullanılabilir.
Puppeteer'ı veri ayrıştırma için nasıl kullanabilirim?
Bunu kullanmanın en kolay yolu, tarayıcı araç çubuğunuzdaki uzantı simgesidir: Yüklendikten sonra, tarayıcı araç çubuğunuzda yeni bir simge göreceksiniz:
Simgeye tıkladığınızda, hangi web sitesinin inceleneceğini seçmeniz için size bir istem verirler. İlk kez çalıştırıldığında, tarayıcınızda açık olan tüm web sitelerine erişim izni isteyecektir. Bunu daha sonra pencerenin altındaki Seçenekler düğmesine tıklayarak her zaman değiştirebilirsiniz:
Buradan, Puppeteer Parser'ı diğer DOM denetçileri gibi kullanın. Tam olarak Chrome Geliştirici Araçları veya Firefox Geliştirici Araçları gibi çalışır, ancak tek başına bu araçların her ikisinden de çok daha güçlüdür.
Bir ayrıştırıcı satın almaya karşı bir ayrıştırıcı oluşturmak.
Bir ayrıştırıcı oluşturmak sadece ayrıştırıcıyı oluşturmakla ilgili değildir. Aynı zamanda nasıl kullanılacağını anlamakla da ilgilidir. Bu, dilinizin gramerini anlamanız ve iyi bir lexer/tokenizer yazmayı öğrenmeniz gerektiği anlamına gelir (bu da düzenli ifadeler hakkında yeterince bilgi sahibi olmayı gerektirir).
Birçok kişi bir ayrıştırıcı satın almanın sıfırdan bir tane oluşturmaktan daha ucuz olduğunu düşünür. Ancak bu doğru değildir: bir ayrıştırıcı satın alırsanız, o sırada hangi yazılım paketini yüklüyorsanız, bilgisayarınıza ücretsiz olarak yüklenecektir. Daha sonra başka bir şey yapılandırma veya yükleme konusunda endişelenmeden kullanabilirsiniz.
Bu bir avantaj gibi görünebilir, ancak çoğu ayrıştırıcının belirli uygulamalar için uygun olmamasına neden olan sınırlamaları vardır (örneğin, iç içe geçmiş yapıları desteklemezler).
Ayrıca, birçok ücretsiz ayrıştırıcı olmasına rağmen, eylemleri genellikle çok sınırlıdır. Temel kütüphaneleri tarafından desteklenenlerden daha karmaşık gramerleri işleyemezler (bu kütüphanelerin bile genellikle kısıtlamaları vardır).
Ve son olarak, böyle bir kütüphaneye karşı kod yazarken, farklı sürümlerin kimin yazdığına bağlı olarak farklı davranabileceğini her zaman hatırlamanız gerekecektir. Dolayısıyla, birileri kütüphaneleri için testler ve her bir öğenin ne yaptığını ve neden yaptığını açıklayan belgeler yazmadığı sürece, böyle bir API kullanmak oldukça sinir bozucu olabilir.
Şimdi bir ayrıştırıcı yapmanın bazı avantajlarına bakalım:
- Herhangi bir kütüphanenin desteklemediği bir gramer için kendi ayrıştırıcınızı yazabilirsiniz. Önceden var olan bir ayrıştırıcının sınırlamalarına güvenmek zorunda değilsiniz ve bunu istediğiniz kadar karmaşık veya basit hale getirebilirsiniz.
- Taşınabilirlik sorunları hakkında endişelenmenize gerek kalmadan tüm projelerinizde kullanabilirsiniz (örneğin, bir gün birisi .NET Framework sürüm 2.0'dan 3.5'e geçmeye karar verirse).
- Bir ayrıştırıcı için test yazmaktan çok daha kolaydır. Bununla ne yapabileceğiniz konusunda herhangi bir kısıtlama olmadığından, ayrıştırma sırasında ne olacağı ve her bir öğenin karşılaşıldığında nasıl davranacağı üzerinde tam kontrole sahip olursunuz (hatta bağlama bağlı olarak belirli öğelerin farklı davranması gerektiğine karar verebilirsiniz).
- Kod daha basit olacaktır çünkü hata işleme, istisnalar vb. gibi birçok şey zaten çerçevenin kendisi tarafından halledilmiştir (ve bu şekilde kodunuzu gereksiz yere karıştırmazlar).
- Ve son olarak, çoğu ayrıştırıcı bazı kısıtlamalarla birlikte gelir: yalnızca belirli gramerleri veya yapıları desteklerler, oysa kendi ayrıştırıcınızı yapmak, ihtiyaçlarınıza en uygun grameri oluşturmanıza olanak tanır.
Konut vekilleri.
Web sitelerinden kazınmış HTML verilerini ayrıştırıyorsanız, bazı otomasyon araçları kullanabilirsiniz.
Doğru verilere hızlı bir şekilde ulaşmak için proxy rotasyonunun çok önemli olduğunu biliyor muydunuz?
Birçok web sitesi, dönen yerleşim proxy'leri kullanmıyorlarsa web kazıma araçlarını engeller. Proxy'ler yalnızca IP adreslerini maskelemek ve yasakları önlemekle kalmaz, aynı zamanda istekleri binlerce IP arasında dağıtabilir.
IPBurger, sınırsız iş parçacığı ve eşzamanlı bağlantı ile otomatik proxy rotasyonu sunar. Bu, veri toplamayı hızla artırabileceğiniz ve IP yasakları konusunda asla endişelenmeyeceğiniz anlamına gelir.
Daha fazla ayrıntı için web kazıma proxy 'lerimize göz atın.