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. ?
PHP | preg_match_all() İle İlgili Bir Sorum Var
15
●575
- 07-03-2020, 19:21:51$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.TDBilisim adlı üyeden alıntı: mesajı görüntüle
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:00Eğ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:42sayfanı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.TDBilisim adlı üyeden alıntı: mesajı görüntüle
kaynak siteyi zaten verilerin alındığı yer olarak belirteceğim hocam. yani bir sorun çıkacağını sanmıyorum .. - 07-03-2020, 19:40:31Tamam 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:26komple 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 oTDBilisim adlı üyeden alıntı: mesajı görüntüle
- 07-03-2020, 19:53:02Hocam 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 😀