Ana içeriğe atla

Jsoup Kütüphanesi - 1

Merhaba arkadaşlar. Hatırlarsanız, Java ile ağ programlama yazılarında, web sitesinden bilgiler almayı görmüştük. Sayfanın kaynak kodunu görme, server bilgisini alma, içerik tipini öğrenme gibi birçok işlemi yapabiliyoruz. Aslında bunlardan fazlasını da yapabiliriz. Mesela nasıl? Örneğin web sayfasında bulunan linkleri elde etmek isteyebiliriz, yada resimlerin adreslerini bir listeye koymak isteyebiliriz.

Bunu yapmak için, önce sayfanın kaynağını çekeriz sonra da regular expression(düzenli ifadeler) yardımı ile bilgileri parçalarız. Ama, bu hem zordur hem de vakit alır. Bu işi yapan kütüphaneler varken, oturup tekrardan tekerleği icat etmenin bir anlamı yok. İşte bu kütüphanelerden birisi de jsoup kütüphanesidir. Bu kütüphane, HTML parse etmeye yani, HTML belgelerini parçalamaya ve istediğimiz nesnelere ulaşmaya yarar. Tabi bunun için biraz HTML bilgisi olması gerekir. HTML kodları şuna benzerdir



Bu kodlardan oluşan bir web sayfasını Java'da açtığımızda, eğer
arasında ne yazdığını bulmak istersek, Jsoup kullanabiliriz. HTML nesnelerine ulaşım DOM(Document Object Model - Döküman Nesnesi Modeli) metodu ile olur. Yani bir browser sayfayı belge olarak kabul eder, içindeki herşeyi de(resim,link,form) bir nesne olarak kabul eder.
tag'ine ulaşmak için önce html,sonra body,sonrada p tag'ine ulaşır. Tabi, bugün web sayfalarında kodlar bundan çok daha karmaşıktır. Ancak, kütüphaneler yardımı ile istediğimiz tag'lere çok kolay ulaşabiliriz.

Şimdi, ilk olarak Jsoup kütüphanesini indirip projemize dahil etmemiz gerekiyor. İndirmek için şu adresi kullanabilirsiniz. İndirdikten sonra projeye dahil edelim ve kullanmak için hazırlıklara başlayalım. Projeye nasıl dahil edeceğimizi burda anlatmıyorum, ancak yapamazsanız yorum olarak bildirin elimden geldiği kadar yardımcı olmaya çalışırım.

Evet, artık kullanmaya başlayabiliriz. Bu yazıda örnek olarak http://example.com adresi üzerinde denemeler yapacağız. Siteye girip bakarsanız, orta kısımda ingilizce bir yazı olduğunu görürsünüz. Bu yazı tag'leri içinde yazılmış. Şimdi Java ile siteye bağlanalım ve bu yazıyı ekrana dökelim.



Çıktısı










Gördüğünüz gibi çok basit. Aynı şekilde, sayfanın başlığını da bu şekilde alabiliriz. Sayfanın başlığı arasında olduğu için, p yerine title yazarak, title tag'ine ulaşabiliriz.

Şimdi yukarıda yazdığımız kodu kısaca açıklayalım. İlk olarak gerekli paketleri import ettik. Bu paketlerden Document, sayfayı temsil eder. Yani html kodlarından oluşan bütünü. Jsoup sınıfının connect() metodu ile siteye bağlantı kurduk, daha sonra get() metodu ile sayfanın kaynak kodlarını Document nesnesine aktardık. Tabi ki her zaman bir siteye bağlanmak zorunda değiliz. Elimizde html kodlarını içeren bir String varsa, bunu da parse edebiliriz. Buna da birazdan değineceğiz.

Sayfayı değişkene aktardıktan sonra, artık sayfanın nesnelerine ulaşabiliriz. Nesnelere ulaşmak için birden fazla yol var. Sadece tag adını vererek sayfada bu tag'lerin hepsine ulaşabiliriz ve Elements türünden bir listeye aktarabiliriz. Bulduğumuz tag'ler birer Element olarak listenin içinde yer alıyor. Koda bakarsanız, for döngüsünde her elemana Element türünden p dedik ve döngü oluşturduk. Sonrada bunların yazılarını text() metodu yardımı ile ekrana yazdık.

Dediğim gibi, bir siteye bağlanarak html kodlarını alıp parse etmek zorunda değiliz. Elimizde html kodları varsa ve bunu String değişkene aktardıysak, aşağıdaki örnek kodda olduğu gibi parse edebiliriz.



Eğer elinizde html uzantılı dosyanız varsa, File ile açıp parse() metoduna parametre olarak verirseniz, dosyayı parse edebilirsiniz.



Bu yazıda bu kadar yeterli. Bir sonraki yazıda buluşmak dileğiyle...

Yorumlar

Bu blogdaki popüler yayınlar

Python Subprocess

subprocess modülü, yeni bir process oluşturmayı sağlayan, bunların girdi-çıktılarını ele alma imkânı veren ve dönüş kodlarını almayı sağlayan bir modüldür. Yani daha basit bir şekilde, program içinde program çalıştırmaya imkan veren bir modüldür. Subprocess Modülünün Kullanımı subprocess basit bazı process'leri kullanmak için birkaç tane fonksiyon sunuyor. Daha karmaşık bir process çalıştırmak isterseniz, Popen sınıfını kullanabilirsiniz. Bunlara detaylı bir şekilde değinmeye çalışacağız. Şimdi basit fonksiyonları inceleyelim

Infix to postfix dönüşümü

Infix to postfix dönüşümü, operatorün ortada olduğu a+b yazım şeklini operatorün sonda olduğu ab+ yazım şekline dönüştürme işlemidir. Bu yazıda iki şekilde dönüşümden bahsedeceğim:   1) Stack yapısı kullanarak dönüştürme 2) Kağıt üstünde el ile dönüştürme    Infix gösterimi, bizler için kolay bir gösterim olsa da makineler için öyle değildir. İfadeyi okurken a + b * c işleminde önce b ile c yi çarpıp sonra da a ile toplamayı kolay bir şekilde yapabiliriz çünkü bizim ifadeyi sıra ile adım adım giderek okuma zorunluluğumuz yok. Önce b*c nin öncelikle olduğunu görerek oradan başlar, sonra a ile kolayca toplarız.

Python Soket Programlama

Merhaba arkadaşlar. Bugün sizlerle birlikte Python'da socket programlama yapacağız. Bunun için Python da socket kütüphanesini kullanacağız. Peki nedir bu socket programlama? Soket programlama, sizin iki program arası yada iki bilgisayar arası iletişim kurmanızı sağlar. İşte bizde bugün iki programımızı birbiri ile haberleştireceğiz. Bunun için elimizde iki program olacak. Birinci program,mesaj bekleyen program olacak, diğeri ise mesaj gönderen program.