Şimdi Ara

JAVA HTML PARSİNG YARDIM LÜTFEN

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
13
Cevap
0
Favori
423
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar merhaba. Bir web sayfasında kelime arama yapma programı yapmam gerekiyor. Mesela bu sayfada 've' kelimesini arayacağım.

    Yapabildiğim şu. Bu sayfanın html'inde arama yapabiliyorum. Ama html'de etiketler linkler vs oluyor. Benim sadece sayfada gözüken yazılar üzerinde arama yapmam gerekli. Yol gösterecek var mı, çok memnun olurum yardım ederseniz.



  • Kullanmanıza izin veriliyorsa open source java html parserlar ile text datasını exclude etmen gerek öncesinde. Onun içerisinde arama yapabilirsin daha sonrasında. Eğer izin verilmiyor ise html taglerini anlayan ve bu tagleri trim edebilen fonksiyonlar kendin yazmalısın.

    Şurası sana anafikri verecektir :https://stackoverflow.com/questions/3507353/how-to-parse-only-text-from-html
  • quote:

    Orijinalden alıntı: theVerge

    Kullanmanıza izin veriliyorsa open source java html parserlar ile text datasını exclude etmen gerek öncesinde. Onun içerisinde arama yapabilirsin daha sonrasında. Eğer izin verilmiyor ise html taglerini anlayan ve bu tagleri trim edebilen fonksiyonlar kendin yazmalısın.

    Şurası sana anafikri verecektir :https://stackoverflow.com/questions/3507353/how-to-parse-only-text-from-html

    Hocam jsoup kullanıyorum. Mesela sadece p etiketi içerisindeki yazıları almak istersem alabiliyorum. Ama bunun bir standardını nasıl bulacağım hangi sayfada hangi etiketli yazılar sayfada gözüküyor onu nereden bileceğim ?




  • jsoup kullanıyorsunuz madem doc dan faydalanabilirdiniz..

    yineden bilgi olarak vereyim size..

    html sayfasını bir string'e okuyun..

    gerisini jsoup hallediyor..
    https://jsoup.org/apidocs/org/jsoup/package-summary.html
    https://jsoup.org/apidocs/org/jsoup/Jsoup.html
    https://jsoup.org/apidocs/org/jsoup/nodes/Document.html

    String html = "...";
    Document doc = Jsoup.parse(html);
    System.out.println(doc.text());

    veya sadece body'i istiyorsanız

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

    sizin case için doc.text() içeriğinde istediğiniz "..." içeriği kolayca aratabilirsiniz..



    < Bu mesaj bu kişi tarafından değiştirildi theVerge -- 29 Kasım 2017; 23:12:10 >




  • quote:

    Orijinalden alıntı: theVerge

    jsoup kullanıyorsunuz madem doc dan faydalanabilirdiniz..

    yineden bilgi olarak vereyim size..

    html sayfasını bir string'e okuyun..

    gerisini jsoup hallediyor..
    https://jsoup.org/apidocs/org/jsoup/package-summary.html
    https://jsoup.org/apidocs/org/jsoup/Jsoup.html
    https://jsoup.org/apidocs/org/jsoup/nodes/Document.html

    String html = "...";
    Document doc = Jsoup.parse(html);
    System.out.println(doc.text());

    veya sadece body'i istiyorsanız

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

    sizin case için doc.text() içeriğinde istediğiniz "..." içeriği kolayca aratabilirsiniz..

    Hocam dediklerinizin hepsini yaptım zaten. Sadece body kısmını almak istersem ya da sadece bir etiketli kısmı almak istersem alabiliyorum.

    Yalnız benim sadece o web sayfasında kullanıcıya gözüken kelimeler arasından arama yapmam gerekiyor. google chrome ctrl f özelliği gibi.

    Mesela şu sayfayı örnek alalım.

    https://www.btk.gov.tr/tr-TR/Sayfalar/SG-SIBER-GUVENLIK-KURULU

    Buradan sadece body kısmını alabiliyorum. Ama body kısmını alınca açık olmayan menüler, sayfada gözükmeyen linkler vs de ekleniyor işin içine.

    Ben sadece sayfada gözüken yerleri almak istiyorum. Sadece sayfada gözüken yerleri nasıl anlayıp koda aktaracağım. Yani bunun her site için bir standardı var mıdır. mesela bu sitede p etiketli yerleri alınca sayfada gözüken yerlerin büyük bir kısmını almış oluyorum. Ama sol taraftaki linkler alınmıyor.

    Mesela başka bir site için başka etiketli yerler sayfada gözüküyordur. Bunun standardını nasıl bulacağım. Google chrome'un ctrl f özelliği nasıl çalışır. bunu anlayabilsem..




  • Onun icin site ici arama yapmaniz gerek. Yani siteye ozgu olur.. metin iceren bir div iniz olur search aramayi orda yapar. Sizin istediginiz gibi her sitede o kismi anlasin sadece orada arama yapsin olayi yok malesef. Google nasil yapiyor derseniz google indexleme yapiyor arkada calisan ml var. Tum site iceriginde arama yapmaniz gerekecek..

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • theVerge T kullanıcısına yanıt
    Sadece chrome degil hocam mozilla opera vs hepsinde ctrl f ozelligi sadece sayfada gorunen kısımda arama yapıyor. Kapali yerleri açmıyor.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    ACİL YARDIM PDF.JS HATASI
    7 yıl önce açıldı
    Daha Fazla Göster
  • Jsoup'un getAllElements fonksiyonu ile tüm elemanları seçip {"style", "script", "head", "title", "meta", "[document]"} içermeyenleri filtreleyebilirsen, görünen tüm elemanlara ulaşmış olmaz mısın, şunun gibi:

    quote:

    package com.rvx.BasitParser;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import java.net.*;
    import java.util.Arrays;
    import java.io.*;

    public class WikiScraper {
    static String[] names = {"style", "script", "head", "title", "meta", "[document]"};

    public static void main(String[] args){
    scrapeTopic("http://motherfuckingwebsite.com/");
    }

    public static void scrapeTopic(String url){

    String html = getUrl(url);
    Document doc = Jsoup.parse(html);
    Elements elts = doc.getAllElements();
    for (Element elt : elts)
    if (gorunurMu(elt))
    System.out.println(elt.text());
    }

    public static boolean gorunurMu (Element elt) {

    try {
    if (Arrays.asList(names).contains(elt.parent().tagName().toString()))
    return false;
    return true;} catch(Exception e) {
    System.out.println("Sorun!!!");
    return false;
    }
    }

    public static String getUrl(String url){

    URL urlObj = null;
    try{urlObj = new URL(url);}catch(MalformedURLException e){
    System.out.println("The url was malformed!");
    return "";
    }
    URLConnection urlCon = null;
    BufferedReader in = null;
    String outputText = "";
    try{
    urlCon = urlObj.openConnection();
    in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
    String line = "";
    while((line = in.readLine()) != null){outputText += line;}
    in.close();
    }catch(IOException e){
    System.out.println("There was an error connecting to the URL");
    return "";
    }
    return outputText;
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 30 Kasım 2017; 20:14:42 >
    < Bu ileti mini sürüm kullanılarak atıldı >




  • Hocam bu kodu denedim ama aynı yeri birçok kez yazdırıyor, bir de sadece sayfada görünen kısımları çekmiyor kapalı menüler de yazanları da alıyor.

    Mesela şu sayfada denerseniz kapalı menülerin içeriğini de yazdırdığını görebilirsiniz.

    https://www.btk.gov.tr/tr-TR/Sayfalar/SG-SIBER-GUVENLIK-KURULU
  • Doğrudur fakat o kodu Jsoup ile bahsettiğin olay nasıl yapılabilir diye demo amaçlı yazdım ve bahsettiğin sitede denemedim; deneme amaçlı (ismi de oldukça faul olan :|) bir sitede deneyip gönderdim, görüntülenmeyen etiketler listesini de {"style", "script", "head", "title", "meta", "[document]"} Stackoverflow'daki bir gönderiden aldım ve bahsettiğin sitedeki 'kapalı menü' ler için ekleme yapmadan öylesine yazdım, o sitedeki 'kapalı menü' leri inceleyerek kodu düzenleyerek istediğin kıvama getirebilirsin; her halukarda bu kod sadece demo amaçlı. Fakat aynı işlemi kendim yapmak isteseydim CasperJS veya Selenium 'u kullanırdım; birisi para vererek kısa sürede yapmamı isteseydi, direkt Selenium'u kullanırdım cunku CasperJS 'i hiç kullanmadım ancak Selenium'u bayağı kullandım :|

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: revivo72

    Doğrudur fakat o kodu Jsoup ile bahsettiğin olay nasıl yapılabilir diye demo amaçlı yazdım ve bahsettiğin sitede denemedim; deneme amaçlı (ismi de oldukça faul olan :|) bir sitede deneyip gönderdim, görüntülenmeyen etiketler listesini de {"style", "script", "head", "title", "meta", "[document]"} Stackoverflow'daki bir gönderiden aldım ve bahsettiğin sitedeki 'kapalı menü' ler için ekleme yapmadan öylesine yazdım, o sitedeki 'kapalı menü' leri inceleyerek kodu düzenleyerek istediğin kıvama getirebilirsin; her halukarda bu kod sadece demo amaçlı. Fakat aynı işlemi kendim yapmak isteseydim CasperJS veya Selenium 'u kullanırdım; birisi para vererek kısa sürede yapmamı isteseydi, direkt Selenium'u kullanırdım cunku CasperJS 'i hiç kullanmadım ancak Selenium'u bayağı kullandım :|

    Teşekkür ederim hocam :)

    Yalnız aklıma şu geldi, zaten jsoup ile body kısmını seçip,body den sadece texti yazdır deyince o etiketler alınmamış oluyor zaten metadır headdir falan :D

    2 gündür araştırıyorum hala bulamadım nasıl yapacağımı




  • Jsoup HTML 'i tarama / pars etme konusunda çok çok iyidir ancak HTML etiketlerine fazla bağlıdır. Yani daha cok HTML belgeleri batch olarak işlemek için daha uygundur; bir sayfayı (örneğin URL'ini verdiğin sayfa gibi) ziyaret edip o anda sayfada neyin göründüğünü (hangi HTML etiket görünür hangisi görünmez gibi vs) hesaba katarak işlem yaptırmaya çok elverişli olmayabilir. O açıdan Jsoup yerine Selenium cok daha etkili olabilir. Her iki durumda da (Jsoup veya Selenium) bahsettiğin işlem için bayağı bir deneme ve iterasyon gerekebilir ki o da kafadan bir gün sürer. Gönderdiğim kodu yarım saatte, bilemedin en cok bir saatte yazdım :|

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Hocam selenium anahtar kelimesinden yola çıkarak islemi seleniumla yaptım ve istedigim gibi oldu.



    Yani jsoupla body kismini text olarak stringe attığımda kapali menü icerikleri de gelmisti. Seleniumla atınca kapalı menuler gelmedi.



    Selenium sanırım derdimi anlayıp bi kıyak geçti bana :D

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.