5 Haziran 2014 Perşembe

Çözüm : Cannot Change version of project facet Dynamic Web Module to 2.5

Geçenlerde karşılaştığım bu sorunu çözmek için :


  1. Window -> Show View -> Other seçin ve General kısmından Navigator'ü seçin.
  2. Aşağıdaki resimde görüldüğü gibi Navigator alanı karşınıza çıkacak. 
  3. İlgili proje içerisindeki settings klasörünü açın.
  4. .settings içerisindeki org.eclipse.wst.common.project.facet.core.xml dosyasını açın.
  5. jst.web kısmındaki versiyon değerini hatada aldığınız versiyon değeri ile değiştirin ve kaydedin.

  6. <?xml version="1.0" encoding="UTF-8"?>
    <faceted-project>
      <fixed facet="wst.jsdt.web"/>
      <installed facet="wst.jsdt.web" version="1.0"/>
      <installed facet="jst.jsf" version="2.2"/>
      <installed facet="jst.web" version="2.5"/>
      <installed facet="java" version="1.6"/>
    </faceted-project>
    
  7. Maven projenizi update edin ve işlem tamamlandı.
Devamı.. »

18 Mayıs 2014 Pazar

JSoup - Seçicilerin Kullanilmasi

Eğer az çok web geçmişiniz varsa bilirsiniz CSS kullanırken veya Javascript kullanırken elementleri etiketleri ile, verdiğimiz idler ile veya atadığımız sınıflar ile çağırıp kullanırız.

Bu derste Document, Elements ve Element sınıflarında bulunan select(String selector) metodunun kullanımını göreceksiniz.

Bu metoda birçok şekilde parametre gönderebilirsiniz. İsterseniz elementin id değerini girersiniz, isterseniz sahip olduğu classı veya etikete ait href, src gibi nitelikleri kullanarak element arayabilirsiniz. Şimdi bunları nasıl kullanacağınıza bir göz atalım.

Basit bir örnekle html sayfasındaki h1 etiketlerinin içeriğini almak istersek :

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

    public static void main(String[] args) {

        try 
        {
             Document doc = Jsoup.connect("https://java4fun.blogspot.com.tr").get();
             Elements table = doc.select("h1");
             
             for (Element element : table) 
             {
                  System.out.println(element.text());
             }
            
         } 
         catch (Exception e) 
         {
              e.printStackTrace();
         }
        
    }
    
}

Bu şekilde etiket isimlerini yazarak html nesnelerine ulaşabiliriz ancak çoğu zaman daha karmaşık şekilde aramanız gerekecek.

Örneğin class değeri kategoriler olan li elementlerini çekmeniz gerekecek veya png resimlerini çekmek istediğinizde img etiketinin src özelliği içerisinde .png ifadesi geçen elementleri arayacaksınız.

SEÇİCİ ÖZELLİKLERİ

tagname - Etiket Adı İle Ara
doc.select("h1") -Document nesnesindeki tüm h1 elementlerini getir

#Id - Elementi Id Değeri İle Ara
doc.select("#logo") - ID'si logo olan elementleri getir
doc.select("div#menu") - ID'si menu olan div elementlerini getir

.class - Class Özelliği İle Ara
doc.select(".floatLeft") - floatLeft Classında olan elementleri getir
doc.select("div.left") - Classı left olan div elementlerini getir

[attribute] - Etikete ait özelliği kullanarak ara
doc.select("a[href]") - href niteliğine sahip a elementlerini getir

[attribute = value]
doc.select("a[href=http://www.youtube.com/]") - href değeri bu adres olan elementleri getir

[attribute^= value]
doc.select("img[src^=gallery]") - src değeri gallery ile başlayan img elementlerini getir

[attribute$=value]
doc.select("img[src$=.png]") - src değerinin sonu .png ile biten img elementlerini getir

[attribute*=value]
doc.select("a[href*=jsoup]") - href değerinde jsoup kelimesi geçen a elementlerini getir

Tüm HTML Etiketlerine ait nitelikler(html attributes) :
https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes

  UYGULAMA

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

    public static void main(String[] args) {
     
     try 
     {
          String url = "http://java4f.blogspot.com.tr/";
          Document document = Jsoup.connect(url).get();
          
          System.out.println("SAYFADAKİ PNG RESİMLERİNE AİT LİNKLER : \n");
          
             //Src degerinin sonu .png ifadesiyle biten elementleri getir
             Elements pngImages = document.select("[src$=.png]");
             for (Element element : pngImages) 
             {
                  //Resmin linkini yaz
                  System.out.println(element.absUrl("src"));
             }
             
             System.out.println("\nSAYFADA İÇİNDE JSOUP KELİMESİ GEÇEN LİNKLER \n");
             Elements jsoupTutorials = document.select("a[href*=jsoup]");
             for (Element element : jsoupTutorials) 
             {
                  //Ilgili elementin href degerini yaz yani linkin tamamini 
                  System.out.println(element.attr("href"));
             }
      } 
      catch (Exception e) 
      {
             e.printStackTrace();
      }
        
   }
    
}
#KAYNAK
http://jsoup.org/cookbook/extracting-data/selector-syntax 
Devamı.. »

17 Mayıs 2014 Cumartesi

JSoup - HTML Table Elementini Okuma

Ben bu derste dosyadan okuyarak yaptım ama isterseniz önceki derslerden url üzerinden bir sitedeki table elemanının verilerini de okuyabilirsiniz.
İlgili Ders : JSoup İle Web sitesinden HTML Verisi Çekme

Öncelikle bilgisayarımda index.html adında şöyle bir dosya var :

<html>
<head>
<title> Java4Fun - JSoup Dersleri </title>
</head>

<body>

<table id="kisiListesi">
<tr>
  <td>Türker</td>
  <td>Sağlam</td>
  <td>50</td>
</tr>
<tr>
  <td>Neşe</td>
  <td>Yalçın</td>
  <td>23</td>
</tr>
</table> 

</body>
</html>

JSoupDemo.java Dosyası 

import java.io.File;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

    public static void main(String[] args) {

     try 
     {
             File file = new File("K:/index.html");
             Document doc = Jsoup.parse(file, "UTF-8");
             
             Elements table = doc.select("table[id=kisiListesi]");

             //kisiListesi tablosundaki tum satir elementlerini al
             Elements rows = table.select("tr");
             
             //Her bir satir icin tum kolonlari dolas
             for (Element row : rows) 
             {
                    //Bu satira ait kolon elementlerini bul
                    Elements columns = row.select("td");
               
                    //Her kolonun icerigini yazdir
                    for (Element column : columns) 
                    {
                         System.out.println(column.text());
                    }
               
                    System.out.println("\n");
              }
      } 
      catch (Exception e) 
      {
             e.printStackTrace();
      }
        
 } 
}
Devamı.. »

JSoup - HTML Sayfasındaki Resimleri Çekmek

Java ile bir HTML sayfasındaki resimleri çekmek için jsoup kullanarak img etiketine sahip elementler bulunur. Elde edilen her bir html elementinin src özelliğini kullanarak resmin linki elde edilir ve bu link üzerinden ilgili resim dosyası indirilir.

Bu örnekte, verilen url içerisindeki resimleri, resimlerin linkleri ve dosya adlarını nasıl bulacağınızı göreceksiniz.

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JSoupDemo {

 //Resimlerin cekilecegi web sayfasi
 private final String url = "http://java4fun.blogspot.com.tr";
    
 //Resimlerin kaydedilecegi dizin
   private final String filePath = "K:/resimler";

    public void getAllImages()
    {
       try 
       {
            //Sayfaya baglanma ve HTML icerigin alinmasi
            Document doc = Jsoup.connect(url).get();

            //sayfadaki img etiketine sahip tum html elementlerini al
            Elements img = doc.getElementsByTag("img");

             //Her bir elementin url bilgisini al ve resimi dosyaya yazdir 
             for (Element el : img) 
             {
                  //Her bir resmin linkini al
                  String src = el.absUrl("src");
                  System.out.println("Resim URL : " +src);

                  //Resmin linkini kullanarak bilgisayara indir
                  writeImages(src);
             }

       } 
       catch (IOException e) 
       {
             e.printStackTrace();
       }
       
    }
    
    public void writeImages(String src) throws MalformedURLException {

         //Src linki uzerinden dosya ismini ayristir
         int indexname = src.lastIndexOf("/");
 
         if (indexname == src.length()) {
             src = src.substring(1, indexname);
         }
 
         indexname = src.lastIndexOf("/")+1;
         String imageName = src.substring(indexname, src.length());
 
         System.out.println("Dosya Adı : "+imageName);
        
         URL url = new URL(src);
         
         //Veriyi dosyaya yaz
         try(OutputStream out = new BufferedOutputStream(new FileOutputStream( filePath + imageName));
          InputStream in = url.openStream())
         {
            for (int b; (b = in.read()) != -1;) 
            {
                   out.write(b);
            }
         }
         catch (Exception e)
       {
                e.printStackTrace();
         }

    }
    
    public static void main(String[] args) {

        JSoupDemo test = new JSoupDemo();
        test.getAllImages();
    }
    
}
#KAYNAK
http://examples.javacodegeeks.com/enterprise-java/html/download-images-from-a-website-using-jsoup/
Devamı.. »

JSoup - HTML Sayfasındaki Tüm Linkleri Çekmek

JSoup kütüphanesini kullanarak Java'da bir sayfadaki tüm linkleri çekmek için aşağıdaki örneği inceleyin.

JSoup kütüphanesinde CSS seçicilerin nasıl kullanıldığını buradan öğrenebilirsiniz.
Tüm JSoup Dersleri 

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class HelloWorld {
 
 public static void main(String[] args) {
 
   try
   {
      Document document = Jsoup.connect("http://java4f.blogspot.com.tr").get();
     
      //Sayfa icerisindeki tum linkleri getir
      Elements links = document.select("a[href]");
     
       //Elements nesnesine aktarilan her bir elemanin icerigini yazdir
       for(Element link: links)
       {
           //Link nesnesinin href niteligine ait icerigi yazdir
           System.out.println("link: " +link.attr("abs:href"));
       }
   }
   catch (IOException e)
   {
      e.printStackTrace();
   }
 
 }

#REFERANS
http://jsoup.org/cookbook/input/load-document-from-url 
Devamı.. »

JSoup - Dosyadan HTML Verisi Okumak

Javada JSoup kütüphanesini kullanarak bilgisayarınızdaki bir html dosyasını veya html etiketleri içeren bir metin dosyası gibi başka dosyalardaki html verisinin nasıl ayrıştırıldığını öğrenmek için aşağıdaki örneğe göz atın.

Tek değiştirmeniz gereken elinizdeki dosya türünün uzantısı. Ben bir html dosyasını kullandım ancak bu aşağıdaki gibi html kodları içeren bir text dosyası ya da başka bir dosya türü de olabilirdi.

HTML DOSYASI 

<html>
<head>
<title> Java4Fun - JSOUP DERSLERİ </title>
</head>

<body>

<p>Java İle HTML Dosyası Nasıl Okunur</p>
<p>JSoup Kullanarak Text Dosyasındaki HTML Verisini Parçalama</p>

</body>
</html>

HelloWorld.java

import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class HelloWorld {

 public static void main(String[] args) {

   try 
   {
       File file = new File("K:/index.html");
       Document doc = Jsoup.parse(file, "UTF-8");
       System.out.println("Sayfa Başlığı : " + doc.title() + "\n");
      
       //P etiketini tasiyan tum elementleri getir
       Elements elements = doc.getElementsByTag("p");
     
       //Elements nesnesi icerisindeki her bir p elementinin icerigini yaz
       for (Element e : elements) 
       {
            System.out.println(e.text());
       }
   } 
   catch (IOException e) 
   {
       e.printStackTrace();
   }

 }
}
#KAYNAK
http://jsoup.org/cookbook/input/load-document-from-file 
Devamı.. »

JSoup - URL Üzerinden HTML Verisi Çekmek

Önceki örnekte String değişkeni içerisinde hazır bulunan bir html ayrıştırılmıştı. Şimdi bir URL üzerinden HTML elementlerine ulaşılacak.

Bu örnekte blog içerisindeki linkleri ve blog başlığını elde ediliyoruz.

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class HelloWorld {

 public static void main(String[] args) {

   try 
   {
    Document document = Jsoup.connect("http://java4f.blogspot.com.tr").get();
    
    //Sayfa icerisindeki tum linkleri getir
    Elements links = document.select("a[href]");
    
       //Elements nesnesine aktarilan her bir elemani yazdir
       for(Element l: links)
       {
           System.out.println("link: " +l.attr("abs:href"));
       }
   } 
   catch (IOException e) 
   {
      e.printStackTrace();
   }

 }

#REFERANS
http://jsoup.org/cookbook/input/load-document-from-url
Devamı.. »

Java4Fun Copyright © 2011 | Template created by O Pregador | Powered by Templates de luxo