1. sayfa
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.. |
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.. |
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. |
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:
|
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 :| |
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 :| |
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 |
1. sayfa
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.