HTML’i RegEx ile Parse Etmemelisin!

Erkan Güzelküçük
Devbase
Published in
2 min readOct 31, 2018

HTML’i Parse ederken RegEx kullanabilirsiniz tabii ki, bu sizin tercihiniz. Fakat kullanmamanız gerekir. Nedenlerini anlatacağım.

html Regex ile ilgili görsel sonucu

Öncelikle RegEx Nedir? konusunu biraz açalım sonra neden HTML Parse ederken RegEx’i kullanamıyoruz öğrenelim.

RegEx;

  • Yoğun veri yığını arasında içerisinde istenilen bilgilere ulaşmak
  • Kullanıcı tarafından girilen değerlerin yönetimi
  • Verileri kullanım amaçlarına göre yönetmek

gibi gibi nedenlerle kullanılan belli başlı kurallar çerçevesinde bir syntax’a sahip esnek ve kolaylık sağlayan bir tool’dur.

HTML Parse etmek için yeterli bir tool olmadığı ortada, yeterince nested çalışmayan bir yapısı var. Bu da HTML Parse etmemek için yeterli bir sebep.

Gerçek hayat örnekleri üzerinden gidelim; Bir <ul> elementiniz var ve içerisinde onlarca <li> bulunuyor, her <li> item’ının içerisinde çok farklı dallanmış budaklanmış objeler bulunuyor. RegEx ile bu verdiğimiz örneği parse etmeniz, boş div’leri yakalamanız ya da attribute’sine göre element’leri select etmeniz çok zor.

Zaten RegEx’in amacı da HTML Parse etmek değil. Yapabilir misiniz? tabii ki yapabilirsiniz fakat değerlendirmeniz gereken bir parametre var. HTML boyutum ne kadar?

Bu çok önemli bir husus, çünkü RegEx HTML’i parse ederken bir anda CPU tüketimini yükseltiyor. Parse ederken kullandığınız pattern yapısal olarak HTML’i tam manasıyla çözümleyemeyeceği için CPU bir anda fırlıyor.

Eminim aklınıza “Peki ya nasıl yapacağız?” diye bir soru geliyordur.

HTML Agility Pack’i kullanmanızı tavsiye ederim. XPath’ler kullanarak daha performanslı ve daha kolay kullanım sağlayabilirsiniz. En azından kullandığınız ürün HTML’i Parse etmek için üretilmiş ve tek görevi bu. Bu konuda uzmanlaşmış.

Örnek bir Stackoverflow soru ve cevap linki paylaşmak istiyorum. Detaylı olarak cevapları okuyabilirsiniz.

Bir sonra ki yazımda görüşmek üzere.

--

--

Erkan Güzelküçük
Devbase

Software Architecture and Research Applications Development Team Leader at Koç University