Bilmek istediğin her şeye ulaş

HTML içindeki belli veri veya kısımları almak istersek, Regex mi yoksa HtmlParser mı önerirsiniz?

İkisini de öğrenme hızı, pratiklik ve uygulama kolaylığı açısından karşılaştırır mısınız? Regex öğrenmek biraz gözümü korkutuyor açıkçası.Düzenle
Ben regex'i biliyorum. HTML veya başka bir dosya hemen hemen her parse işlemi için bir satırlık bir kod oluşturabiliyorsun. Regex'in tek olumsuz yanı öğrenme zorluğu. Oluşturduğun kodlar kriptolu gibi ve okuması zor. Ama, yalnızca HTML ile sınırlı olmaması, örneğin JavaScript için de kullanabiliyor olman temel avantajı. Bir de bütün orta üst düzey diller destekliyor. Benim kişisel tercihim.
  • Paylaş
6

Unluckypod, aslında genel olarak şöle bişi yapmak istiyorum, html içerisindeki belli bir kısmı/alanı aldıktan sonra bu alan içindekileri satır satır (her satır için) tr ve td leri döndürüp, içinden belli kriterlerle eşleşenleri seçmek ve değerlerini almak...

Ceyhun Çakar, Bunu regex yapar. Ama, öğrenene kadar biraz uğraşmak gerekiyor. '<td>.*</td>' komutu eğer non-greedy ve multiline ise <td> tag'ının içini alır. python'da her eşleşme için bir method tetikleyebilirsin re.sub ile. Diğer dillerde de benzeri var bu method'un. Greedy ve multiline olayı için docs.python.org/2/howto/regex.html#greed...

Unluckypod, eyvallah. zor ve gıcık bişimiş bu:)

Unluckypod, şunu yapamadım yahu. ((..),(..),(..),(..)) burada n sayıda tekrar eden (..) kısımları grup olarak alıp yani match edip, kod tarafında bu grupları seçmek istiorum(sonra bu grubun içini de regex ile çekmem lazım başka bir ifade ile çünkü parantez içinde de virgüller arası data var. ama tabi ayrı konu) da regex ile bi türlü yapamadım. Hissediyorum çok basit ama işte bulamadım ve gayet gıcık oldum:))

Ceyhun Çakar, Yalnızca python için yardımcı olabilirim ayrıntı da. Ama mantığınaynı olduğunu biliyorum.
docs.python.org/2/library/re.html

Bu sitede re.sub'da verilen örneği inceleyin. Parametre metod her regular expression eşleşmesinde çağrılır. Her çağrıda metod'a matchobj parametresi girer. Bu parametre bir nesnedir. Eğer sizin yatığınız gibi gruplandırma yoksa tüm eşleşme yakalanır. Eğer varsa matchobj.group(0), matchobj.group(1) şeklinde ulaşabilirsiniz her birine

Unluckypod, benim de istediğim regex syntax idi. neyse sonunda becerdim. ancak ungreedy olayını keşfedince çözdüm:) regex ile her parantez i grup halinde aldım sonra regex class da match grupları dizi den çeker gibi çektim gerekirse her match ettiğim grub üzerinde başka alt işlemler de yaptım. zor oldu gerçekten 2 günümü aldı:)

"HTML içindeki belli bir kısmı almak" şeklinde tarif ettiğiniz için buna en uygun yöntem bence de Regex kullanmak. Ancak, ille de Regex beni zorluyor derseniz, parser olarak HTML AgilityPack size önerimdir: htmlagilitypack.codeplex.com/

Tabi HTML Agility Pack kod tarafında kullanılan bir parser (belki client tarafında da kullanılabiliyordur) .
  • Paylaş
4

Unluckypod, peki o zaman başka bi sorsam...hangi durumlarda veya gereksinimlerde html agilitypack kullanmak daha iyi olurdu.

Hakan Köse, HTML Agility Pack HTML kodları üzerinde bir çok işlem yapabilmenizi sağlıyor. Yani sorunuzun yanıtı duruma göre değişir. Ben şahsen daha çok HTML parse işlemleri için kullandım hep. Bunun dışında ne tarz durumlarda kullanıldığı konusunda pek bir fikir yürütmem yanlış olur. Ama ilk aklıma gelen web crawler gibi bir şey kodluyorsanız mutlaka ihtiyacınız olacaktır.

hakan, kroyum ben agility pack mack anlamam hemen en kolayi explode yaparım uygun değilse regex yapar geçerim

Unluckypod, peki sizce; html kodlarının belli bir kısmını regex ile alsam, sonra bu aldığım html kısmını (büyük tablo yapısı) agilitypack ile içindekileri tarayıp lazım olanı seçsem mi daha kolay olur, yoksa tüm bu işlemi tamamen regex ile yaparsam mı daha kolay olur?

Sonraki Soru
HESAP OLUŞTUR

İstatistikler

381 Görüntülenme5 Takipçi2 Yanıt