folder Tahribat.com Forumları
linefolder Asp - Php - Cgi - Perl
linefolder Simple HTML Dom İle Alakalı



Simple HTML Dom İle Alakalı

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Nvidia
    Nvidia's avatar
    Banlanmış Üye
    Kayıt Tarihi: 13/Nisan/2013
    Erkek

    Hocalar aşşağıdaki kod öbeğinde title  intro falan  alıp atricles diye bi diziye  atmış ama ben <strong style="color: #002166; font-family: Monaco, Verdana, sans-serif; font-size: 11px;">find('div.title'0)  daki '0' muhabbetini anlamadım. Araştırdım ama pek bi sonuca ulaşamadım bilen varmıdır? 

    Ek olarak ben  şu şekilde kullandığımda fatal alıyorum nedendir? 

    foreach($html->find('table[class=price-list-table]') as $element){

           $item['tarih'] = find('thead',0)->plaintext;

    echo $item['tarih'];

    }

    ------------------- aşşağısı simple html dom un kodları ---------------------

    // Create DOM from URL
    $html = file_get_html('http://slashdot.org/');

    // Find all article blocks
    foreach($html->find('div.article') as $article) {
        $item['title']     = $article->find('div.title'0)->plaintext;
        $item['intro']    = $article->find('div.intro'0)->plaintext;
        $item['details'] = $article->find('div.details'0)->plaintext;
        $articles[] = $item;
    }

    Nvidia tarafından 19/Ara/16 17:14 tarihinde düzenlenmiştir

    Milyarlarca yıl ölüydüm dirildim ve tekrar dirilmemek üzere öleceğim günü bekliyorum!
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    PcK0
    PcK0's avatar
    Kayıt Tarihi: 13/Nisan/2007
    Erkek

    http://simplehtmldom.sourceforge.net/manual.htm#section_find

    $ret = $html->find('a');

    // Find (N)th anchor, returns element object or null if not found (zero based)
    $ret = $html->find('a', 0);

    // Find lastest anchor, returns element object or null if not found (zero based)
    $ret = $html->find('a', -1); 

    // Find all 
     
     with the id attribute
    $ret = $html->find('div[id]');

    // Find all 
     
     which attribute id=foo
    $ret = $html->find('div[id=foo]'); 

    seçilen elementlerden ilgili index numarasına sahip olanı geri döndürüyor.
    HTML kodlarının içinde 5 tane div olsun

    $html->find('div') 5ini,

    $html->find('div', 0) ilkini
    $html->find('div', 1) ikincisini
    ...
    $html->find('div', -1) sonuncusnu geri döndürür.

    JQuery'deki eq() karşılığı.

    PcK0 tarafından 19/Ara/16 18:13 tarihinde düzenlenmiştir

    Sadece bi imza..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    kvasir
    kvasir's avatar
    Kayıt Tarihi: 24/Ağustos/2005
    Erkek
    PcK0 bunu yazdı

    http://simplehtmldom.sourceforge.net/manual.htm#section_find

    $ret = $html->find('a');

    // Find (N)th anchor, returns element object or null if not found (zero based)
    $ret = $html->find('a', 0);

    // Find lastest anchor, returns element object or null if not found (zero based)
    $ret = $html->find('a', -1); 

    // Find all 
     
     with the id attribute
    $ret = $html->find('div[id]');

    // Find all 
     
     which attribute id=foo
    $ret = $html->find('div[id=foo]'); 

    seçilen elementlerden ilgili index numarasına sahip olanı geri döndürüyor.
    HTML kodlarının içinde 5 tane div olsun

    $html->find('div') 5ini,

    $html->find('div', 0) ilkini
    $html->find('div', 1) ikincisini
    ...
    $html->find('div', -1) sonuncusnu geri döndürür.

    JQuery'deki eq() karşılığı.

    ek olarak dökümantasyon diyor ki,

    // Find all anchors, returns a array of element objects
    $ret = $html->find('a');

    array döndürüyor. Yani find('div')[0]'ın da kontrol ettiğin elementin içindeki aradığın tag'a sahip ilk elementini vermesi gerekir. find('div',0) ile aynı şeydir.(sonuç olarak, indexing algoritmasını bilmediğim için performans olarak aynımıdır bilemiyorum) 

    E amk PHP imiş farketmedim

     

    2. olarak kodun yanlış, for each'te as $element yapıp iteration içinde sadece find('thead',0) yazmışsın, neyin içinde thead bulacak bu kod ? o belirtilmemiş. $element'te find('thead',0) yaparsan çalışması lazım, Ayrıca her loopta $item['tarih']'i değiştirmeyi anlamadım, item array'ına yeni tarih eklemek için push kullanman lazım. Ayrıca $element'i foreach bittikten sonra çalıştırılan array'in en son üyesine set olmuş halde kullanmayacaksan,manipülasyon yapmayacaksan unset() et.

    table.price-list-table'ı table[class=price-list-table]  olarak yazmak ilginç

     

    Ama simple dom diye birşey kullanacağına direk düz vanilla javascript kullansana maximum performans alasın ? (Bunu React'ın virtual dom gibi ekstra teknolojilerine sahip olmadığı tahmin ederek söylüyorum)

    document.getElementsByTagName('table').getElementsByClassName("price-list-table").forEach(function(element,index){

    $item['tarih'].push(element.getElementsByTagName('thead')[0].textContent);  // textContent yerine innerText, innerHTML olabilir, duruma bağlı

    console.log(index + ". veri -> "$item['tarih']);

    });

    CTRL+SHIFT+ı yaparak sonucu kontrol edebilirsin.

     

     

     

     

    kvasir tarafından 19/Ara/16 20:40 tarihinde düzenlenmiştir
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    majestiquo
    majestiquo's avatar
    Kayıt Tarihi: 24/Eylül/2005
    Erkek

    hocam ikinci değerler diğer arkadaşlarında dediği gibi index değerleri. Yani article in altındaki ilk title ı getiriyor. veri çekme işlemleriyle uğraşacaksanız simple html dom yerine python beatifulsoup araştırmanızı öneririm

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mrbrs
    mrbrs's avatar
    Kayıt Tarihi: 22/Ağustos/2005
    Erkek

    Hocam classı açıp find fonksiyonuna baktığımızda 2. argüman girilmişse girilen index, girilmemişse bütün değerler -array olarak- dönüyor.

    Yazdığınız koda göre 2 değer girilmemiş 

    $html->find('table[class=price-list-table]') array olarak dönecek bu yüzden php foreach kullanımına bakmanız gerekiyor.

    Doğru kod böyle olmalı

    foreach($html->find('table[class=price-list-table]') as $element){

          $item['tarih'] = $element->find('thead',0)->plaintext;

          echo $item['tarih'];

    }

     

     

     

    mrbrs tarafından 20/Ara/16 01:00 tarihinde düzenlenmiştir
Toplam Hit: 1161 Toplam Mesaj: 5
htmlsimpledom