JSOUP İLE HTML PARSING

HTML Dom (Document-Object-Model)

Nedir?

htmldom

”DOM”, “Belge Nesnesi Modeli” anlamlarına da gelmektedir.

İnternet tarayıcıları girilen internet sayfasını bir belge, bu belge (sayfa) içerisinde bulunan tüm elemanları da nesne olarak kabul eder.

Buna göre resim, yazı, form gibi tüm elemanlar nesnedir ve tüm elemanlar arasında bir hiyerarşi mevcuttur.

İşte DOM sayfa içindeki herhangi bir nesnenin özelliğine müdahele edebilmemize, nesne özelliklerini değiştirebilmemize olanak sağlar.

HTML PARSİNG NEDİR?

HTML parsing bir web sitesinden veri elde etmek için HTML DOM yapısını ve CSS mantığını kullanarak veriyi html yapısından ayrıştırıp bir siteden istediğimiz içeriğe ulaşmamaızı sağlar.

Eğer bir web sitesinden veri çekmek istiyorsak programlama diline göre bir html parser kütüphanesi ile çalışılır.

HTML PARSER KULLANIMI

HTML dosyasından bir makalenin text kısmını otomatik olarak yakalamak için ne yapmalıyım?

Web sayfalarından fiyat,başlık,resim… nasıl çekebilirim?

Bu sorular için html parser kütüphanelerini kullanırız.

JSOUP NEDİR?

Jsoup, Java programlama diline ait açık kaynak kodlu bir html parser kütüphanesidir.(.net’te nsoup kullanılır.)

HTML elementlerine(nesnelere) ulaşmada JSOUP bize yardım edecek.

JSOUP ÖRNEK-1

Öncelikle jsoup kütüphanesini projemize eklemeliyiz.http://jsoup.org/download bu adresten güncel jsoup jar’ını indirebilirsiniz.Ben jsoup-1.7.3.jar kullandım.

Öncelikle html elementine(nesnesine) ulaşmak istediğmiz url’i String değişkeni olarak tanımlıyoruz.

String url=”http://www.teknosa.com/urunler/125071152/apple-iphone-5s-16gb-gold-akilli-telefon”;

Yukarıdaki url’e jsoup’la bağlantıyı sağlıyoruz.

Response response = Jsoup.connect(url).timeout(30000).execute();

Bağlantı sonucunda response’u parse ederek doc değişkenine atıyoruz.

Document doc=response.parse();

Artık url’in içeriği bir belge olarak elimizde.Şimdi de bu doc’dan div tag’i altındaki span tag’i içindeki elementi seçiyoruz.

Elements elements = doc.select(“div.grid-widget span.sales.large”);

Seçtiğimiz elementi console a yazdırıyoruz.

System.out.println(elements.first().text());

Sadece text() dersek price iki defa console’a yazılıcak.first() diyerek birincisini yazdırıyoruz.

KODUN TAMAMI

import java.io.IOException;

import org.jsoup.Jsoup;

import org.jsoup.Connection.Response;

import org.jsoup.nodes.Document;

import org.jsoup.select.Elements;

publicclasshtmlParse {

/**

* @param args

*/

publicstaticvoid main(String[] args) {

try {

String url = "http://www.teknosa.com/urunler/125071152/apple-iphone-5s-16gb-gold-akilli-telefon";

Response response = Jsoup.connect(url).timeout(30000).execute();

Document doc = response.parse();

Elements elements = doc.select("div.grid-widget span.sales.large");

System.out.println(elements.first().text());

} catch (IOException e) {

e.printStackTrace();

}

}

}

Console

1.949,00 TL

Özetle, bu örnekte jsoup’ı kullanarak url’den price’ın element path’i belirtilerek(“div.grid-widget span.sales.large”) price çekilmiştir.

Not 1:Tagların class’ları araya nokta konarak belirtilir.İstenen eleman bir div altında ise bu örnekteki gibi(div tag’i altında bulunmakta span tag’i) iki tag ismi arasında boşluk bırakılır.

Not 2:Ayrıca try-catch bloğu arasında yazdığımıza dikkat edelim aksi halde kod çalışmaz.

JSOUP ÖRNEK-2

Jsoup jar’ını projemize bir önceki örnekteki gibi ekliyoruz.

Öncelikle html elementine ulaşmak istediğmiz url’i String değişkeni olarak tanımlıyoruz.

String url=”http://www.teknosa.com/urunler/125071152/apple-iphone-5s-16gb-gold-akilli-telefon”;

Yukarıdaki url’e jsoup’la bağlantıyı sağlıyoruz.

Response response = Jsoup.connect(url).timeout(30000).execute();

Bağlantı sonucunda response’u parse ederek doc değişkenine atıyoruz.

Document doc=response.parse();

html’ini parse ettiğimiz web sayfasının html body’sine body() ile erişiyoruz.

System.out.println(doc.body());

KODUN TAMAMI

import java.io.IOException;

import org.jsoup.Jsoup;

import org.jsoup.Connection.Response;

import org.jsoup.nodes.Document;

publicclass jsoupla_html_parse_et {

/**

* @param args

*/

publicstaticvoid main(String[] args) {

try{

String url="http://www.teknosa.com/urunler/125071152/apple-iphone-5s-16gb-gold-akilli-telefon";

Response response = Jsoup.connect(url).timeout(30000).execute();

Document doc=response.parse();

System.out.println(doc.body());

}catch (IOException e) {

e.printStackTrace();

}

}

}

Console

<body id=”MasterPageBody” data-module=”product”>

<!– Google Tag Manager –>

<noscript>

</noscript>

<script>

dataLayer = [{“userEmail”:””,”userID”:””,”PageType”:”product”,”prodid”:”125071152″,”pbarcode”:”885909785131″,”pname”:”APPLE IPHONE 5S 16GB GOLD AKILLI TELEFON”,”pcat”:”AKILLI TELEFON”,”ufCategory”:”cep-bilgisayari-pda-722″,”pvalue”:1949.0,”productPrice”:1949.0,”pbrand”:”APPLE”,”productUrl”:”http://www.teknosa.com/urunler/125071152/apple-iphone-5s-16gb-gold-akilli-telefon&#8221;,”productImageUrl”:”//img-teknosa.cubecdn.net/TeknosaImg/productImages/1024×783/125071152-1-apple_iphone_5s_16gb_gold_akilli_telefon.jpg”}];

(function (w, d, s, l, i) {

w[l] = w[l] || []; w[l].push({

‘gtm.start’:

.

.

.

Şeklinde devam eden bir çıktı elde ederiz.

JSOUP İLE HTML PARSING” üzerine 14 yorum

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s