JSOUP ile HTML Parse İşlemleri
Bir HTML sayfasının parse edilmesi bazı projelerin temel görevidir. Buna en büyük örnek real-time fiyat karşılaştıran siteler, bot uygulamaları ve hatırlatıcılardır. Bu yazımızda temel işlevleri ile beraber bir java uygulamasında JSOUP kullanarak nasıl HTML Parse yapıldığımı işleyeceğiz.
Ben bu yazıda Maven tabanlı Java Konsol uygulaması üzerinden bu konuyu anlatacağım ancak kodlar modüler olduğu için her türlü java projenize rahatça entegre edebilirsiniz.
JSoup Maven Entegrasyonu
Bu yazının yazıldığı gün en güncel JSoup versiyonu 1.13.1 versiyonuydu. Projemizdeki pom.xml dosyamıza aşağıdaki dependencies tagları arasında aşağıdaki dependency kodlarımızı ekliyoruz.
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>Projemize eklemiş olduğumuz JSoup ile işlem yapabilmek için java dosyamıza aşağıdaki import işlemini yapmamız gerekmektedir.
import org.jsoup.Jsoup;Önemli bir not düşmekte fayda var. Bu işlemi sizin olmayan bir sayfa üzerinden yapacaksanız sayfa sahibinin iznini almanız gerektiğini unutmayınız. İzinsiz kullanımların hukuksal bazı yaptırımları olabileceğini unutmayın. Burada sadece gösterim amaçlı kullanılan site arama motoruna haber yazınca ilk sırada listelenen haber sitesi olması sebebiyle kullanılmıştır. Sayfasındaki hiçbir veri bir yerde depolanmamış, maniple edilmemiş veya herhangi bir yerde yayınlanmamıştır.
JSoup Nasıl Kullanılır
İlk olarak bir kaynak adres belirlenir.
String sayfa = "https://www.haberturk.com/ekonomi";Daha sonra bu kaynak bir JSoup döküman formatına çevirilir.
Document d = Jsoup.connect(sayfa).get();Bu aşamaya kadar olan kısımları aşağıdaki şekilde kontrol edip ekrandaki çıktıyı kontrol ediniz.
String sayfa = "https://www.haberturk.com/ekonomi";
Document d = Jsoup.connect(sayfa).get();
System.out.println(d.outerHtml());Bu aşamadan sonra artık sayfadaki istediğiniz bir kısmı veya tekrar eden kısımları alabiliriz. Mesela ekonomi sayfasının sadece Slide altındaki paneldeki tekrar eden verileri istiyorsak,
for(Element baslik : d.getElementById("SliderBottomNews")
.select("div div .info a:last-child"))
{
System.out.println(baslik.text());
}Yukarıdaki kod bana göre en uygun ve kısa şekilde yazılmış kod olup birden fazla varyasyonda yazılabileceğini unutmayınız. Yukarıdaki kodun bize döndüreceği cevap aşağıdaki şekilde olacaktır.
Bakan Albayrak yatırımcılarla görüşecek
'Nissan Avrupa'da küçülebilir'
Ankara'da ucuz petrol ve stok zirvesi
4 büyük çöktüBu aşamaya geldikten sonra projenize göre bu kısımları istediğiniz şekilde işleyebilirsiniz. İster haber gelince alarm verdirirsiniz, ister haber gelince yeni gelenleri okursunuz istediğiniz şekilde işleyebilirsiniz.
Bu aşamada yine hatırlatmak istiyorum. Bu işlemleri yaparken sahip olmadığınız sayfa sahiplerinden kesinlikle izin almanız gerekmektedir.
Bir önceki işlemde linklerin text kısımlarını aldık. Peki bu linkleri bağlantı adreslerini nasıl alırız.
.attr("abs:href");Yukarıdaki kod ile a ögesinin href tagındaki veriyi olduğu gibi alır. Örneği bir önceki işlemin devamı gibi verecek olursak;
String sayfa = "https://www.haberturk.com/ekonomi";
Document d = Jsoup.connect(sayfa).get();
or(Element baslik : d.getElementById("SliderBottomNews")
.select("div div .info a:last-child"))
{
System.out.println(baslik.text());
System.out.println(baslik.attr("abs:href"));
}Yukarıdaki kodun çıktısı ise,
Bakan Albayrak yatırımcılarla görüşecek
https://www.haberturk.com/bakan-albayrak-uluslararasi-yatirimcilarla-gorusecek-2666454-ekonomi
'Nissan Avrupa'da küçülebilir'
https://www.haberturk.com/nissan-avrupa-da-kuculmeye-gidiyor-haberler-2667753-ekonomi
Ankara'da ucuz petrol ve stok zirvesi
https://www.haberturk.com/ankara-da-ucuz-petrol-zirvesi-haberler-2667740-ekonomi
4 büyük çöktü
https://www.haberturk.com/buffett-satti-zordaki-havayolu-sirketleri-iyice-cakildi-haberler-2667721-ekonomi








2 comments