• 07-03-2020, 19:05:18
    #1
    Merhabalar, preg_match_all() de garip bir şey var.

    şu şekilde kodları göstereyim

    <?php

    $ch = curl_init('https://kadirbolukbasi.wordpress.com/');
    curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true
    ]);
    $source = curl_exec($ch);
    curl_close($ch);

    preg_match_all("/<li.*?</li>/",$source,$veriler);

    print_r($veriler);


    Array
    (
    [0] => Array
    (
    [0] => <li class="current_page_item"><a href="siteadresi/">Başlangıç</a></li>
    [1] => <li class="page_item page-item-509"><a href="siteadresi/p-a-m-u-k/">PAMUK</a></li>
    [2] => <li class="page_item page-item-979"><a href="siteadresi/iplik/">İPLİK</a></li>
    [3] => <li class="page_item page-item-140"><a href="siteadresi/terimler/">TERİMLER</a></li>
    [4] => <li class="page_item page-item-27182"><a href="siteadresi/dunya/">Dünya</a></li>
    [5] => <li class="page_item page-item-10430"><a href="siteadresi/grafik/">GRAFİK</a></li>
    [6] => <li class="page_item page-item-1041"><a href="siteadresi/hakkinda/">HAKKINDA</a></li>
    [7] => <li class="page_item page-item-325"><a href="siteadresi/iletisim/">İLETİŞİM</a></li>
    [8] => <li class="page_item page-item-21080"><a href="siteadresi/fallow/">FALLOW</a></li>
    )
    )


    fakat hedef sitenin kaynağına baktığımda daha fazla li gelmesi gerekiyor. li id lerin hiçbirisi gözükmemekte.
    regex deseninde belirtsem bile li id şeklinde boş bir şey dönüyor.

    acaba içeriği fazla olduğu için mi getirmiyor farklı bir fonksiyon mu kullanmak gerekiyor?

    veya o içeriği nasıl alabilirim. ?
  • 07-03-2020, 19:16:09
    #2
    Eğer print_r ile tüm sayfayı çektiğinizde geliyorsa;
    Regex patterni şunun ile değiştirin.
    "/<li ?.*>(.*)</li>/"
  • 07-03-2020, 19:21:51
    #3
    TDBilisim adlı üyeden alıntı: mesajı görüntüle
    Eğer print_r ile tüm sayfayı çektiğinizde geliyorsa;
    Regex patterni şunun ile değiştirin.
    "/<li ?.*>(.*)</li>/"
    $source değişkenini echo yada print_r ile ekrana bastığımda tüm site açılıyor kaynak kodlarıda gözüküyor fakat bahsettiğim lileri çekimiyor.

    sizin söylediğiniz desende yaptım şu şekilde çıktı verdi

    Array
    (
    [0] => Array
    (
    [0] => <li class="current_page_item"><a href="https://kadirbolukbasi.wordpress.com/">Başlangıç</a></li>
    [1] => <li class="page_item page-item-509"><a href="https://kadirbolukbasi.wordpress.com/p-a-m-u-k/">PAMUK</a></li>
    [2] => <li class="page_item page-item-979"><a href="https://kadirbolukbasi.wordpress.com/iplik/">İPLİK</a></li>
    [3] => <li class="page_item page-item-140"><a href="https://kadirbolukbasi.wordpress.com/terimler/">TERİMLER</a></li>
    [4] => <li class="page_item page-item-27182"><a href="https://kadirbolukbasi.wordpress.com/dunya/">Dünya</a></li>
    [5] => <li class="page_item page-item-10430"><a href="https://kadirbolukbasi.wordpress.com/grafik/">GRAFİK</a></li>
    [6] => <li class="page_item page-item-1041"><a href="https://kadirbolukbasi.wordpress.com/hakkinda/">HAKKINDA</a></li>
    [7] => <li class="page_item page-item-325"><a href="https://kadirbolukbasi.wordpress.com/iletisim/">İLETİŞİM</a></li>
    [8] => <li class="page_item page-item-21080"><a href="https://kadirbolukbasi.wordpress.com/fallow/">FALLOW</a></li>
    )

    [1] => Array
    (
    [0] =>
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    [8] =>
    )

    )
  • 07-03-2020, 19:30:00
    #4
    Eğer pattern kullanmadan gelmiyorsa zaten demekki dinamik bir şekilde Javascript veya Ajax ile geliyordur o veri. Bunu da maalesef cURL veya başka metod ile çekemezsiniz. Modern tarayıcı ile çalışan bot ile çözebilirsiniz ancak. Python selenium vs. Fakat site sahibinin izni yoksa etik değil ve yasal da değil.
  • 07-03-2020, 19:35:42
    #5
    TDBilisim adlı üyeden alıntı: mesajı görüntüle
    Eğer pattern kullanmadan gelmiyorsa zaten demekki dinamik bir şekilde Javascript veya Ajax ile geliyordur o veri. Bunu da maalesef cURL veya başka metod ile çekemezsiniz. Modern tarayıcı ile çalışan bot ile çözebilirsiniz ancak. Python selenium vs. Fakat site sahibinin izni yoksa etik değil ve yasal da değil.
    sayfanın kaynak dosyasını bir txt dosyasına yazdırıp sonra o dosyanın içeriğini okuyup orda preg_match_all ile çekmek istediğimde yine istediğim verileri getirmiyor.

    kaynak siteyi zaten verilerin alındığı yer olarak belirteceğim hocam. yani bir sorun çıkacağını sanmıyorum ..
  • 07-03-2020, 19:40:31
    #6
    Tamam işte komple siteyi çektiğinde zaten gelmiyorsa regex çözmez. Muhtemelen o veri dinamik geliyordur Modern tarayıcı gerekir Javascript ve Ajax çağrıları için. Dinamik şeyler çalışmaz server side çektiğin verilerde. Dinamik javascriptleri işleyen tarayıcıdır (client side). PHP de bunu yapamazsınız. Pythonda selenium modülü işinizi görecektir pythonda çekip Veritabanına yazdırıp ordan PHP ile çekebilirsiniz ancak.
  • 07-03-2020, 19:47:26
    #7
    TDBilisim adlı üyeden alıntı: mesajı görüntüle
    Tamam işte komple siteyi çektiğinde zaten gelmiyorsa regex çözmez. Muhtemelen o veri dinamik geliyordur Modern tarayıcı gerekir Javascript ve Ajax çağrıları için. Dinamik şeyler çalışmaz server side çektiğin verilerde. Dinamik javascriptleri işleyen tarayıcıdır (client side). PHP de bunu yapamazsınız. Pythonda selenium modülü işinizi görecektir pythonda çekip Veritabanına yazdırıp ordan PHP ile çekebilirsiniz ancak.
    komple siteyi çektiğim zaman geliyor hocam explode ile ulaşabiliyorum ama çok uğraştırıyor. preg_match_all ile ulaşamıyorum hani saçma olan o
  • 07-03-2020, 19:53:02
    #8
    Hocam söylesene. TXT ye çektiğinde yine preg match all yaptığını okumamışım 😀. Almak istediğin veriyi html olarak örneğini atar mısın? Ona göre pattern olması lazım. Normalde olması gerekiyor o regex patternde.



    Ek olarak simple_html_dom.php yi kullanmanı öneririm. Css selector gibi veri çekebilirsiniz. Xpath da destekliyor.
    https://simplehtmldom.sourceforge.io



    "$source değişkenini echo yada print_r ile ekrana bastığımda tüm site açılıyor kaynak kodlarıda gözüküyor fakat bahsettiğim lileri çekimiyor."
    Burada lileri çekmiyor demiştin o yüzden 😀
  • 07-03-2020, 20:28:45
    #9
    Kimlik doğrulama veya yönetimden onay bekliyor.
    bence çekmemesi normal uygun li ler getirmiş pregmatch boşluk satır vs. en ufak detayine kadar belirtmek gerekli