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.
The most common way this happens is through a library called jQuery, which parses HTML documents into DOM elements and then uses those elements in its codebase. This makes it easier for developers unfamiliar with HTML/CSS/JavaScript syntax to work with APIs that return HTML content.
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 is a Python library for parsing HTML. It’s designed to be easy to use and fast but powerful enough to handle the most complex documents. Beautiful Soup can parse HTML from many sources, including files, URLs, email messages, and even from your clipboard.
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 supports data parsing JavaScript Object Notation (JSON) documents and JavaScript’s native ECMAScript object notation (ES5). In addition to supporting ES5 syntax, it also supports more recent features such as arrow functions in ES6 code blocks. Cheerio’s API is designed to be easy to use and integrate with other libraries. It provides access to the parsed data as a Java Map, an ArrayList, or a stream of JSON objects.
JSoup
JSoup is a library for data parsing HTML and XML documents. It provides an API that allows you to parse HTML, XML, JSON, CSS files and DOM elements. You can use the parser in a variety of ways:
- 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 is a browser extension that allows you to inspect and modify the DOM of any website. It’s currently available for Chrome, Firefox, and Opera.
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.
Check out our web scraping proxies for more details.