Öncelikle bot nedir ona bir değinmek istiyorum. Bot diğer sitelerden kod parçacıkları aracılığıyla veri çekmemizi sağlar. Bazı fonksiyonlar ve parametreleri kullanarak diğer sitelerden veri (ç)almak diyebiliriz. Bu yazacağım bot basit anlamda yazılmış yalnıza bir sayfadaki verileri çekecek. Eğer geliştirilebilir ve döngüye sokulabilirse eğer elbette tüm sayfaları çekebilirsiniz.
Bu bot ile siirturkusu.com sayfasından bir adet şiiri çektim. İsterseniz başlıklarını da buradaki mantık ile çekebilirsiniz veya yazarın kim olduğunu… Linkleri temizlemek ve bazı html etiketlerini temizlemek elbette yeni bir fonksiyon gerektiriyor. Şimdi botumuza başlayalım.
<?php $site = "https://siirtutkusu.com/yirminci-asra-dair"; $bolme = ('@<div id="sitxt" itemprop="articleBody">.*?</div>@si'); $arama = file_get_contents($site); preg_match_all($bolme,$arama,$siir); echo '<pre>'; print_r($siir[0][0]); echo '</pre>'; ?>
Buradaki değerlerden bahsedecek olursam ;
$site : Veriyi çektiğimiz siteyi bir değişkene aktardık.
$bolme : Mantıklı olarak bir bölme işlemi yaptık. Böylece sitenin her yerini tane tane çekebiliriz. Burada içerik hangi div ya da etiketin içerisindeyse baş ve son kısım alınır.
.*? : Bu ifade oranın değişken olduğunu belirtir. Başka bir sayfadan veri çekileceği zaman div’ler sabit kalacak fakat elbette içerik değişecektir. Bu yüzden .*? kullanılır.
File_get_contents : Bu en önemli fonksiyonlardan birisidir. Belirlenen sitede arama yapmamızı sağlar.
<pre></pre> kodları : Bu kodlar sayesinde gelen değerleri bir dizi halinde görebilir ve ona göre değerleri alabiliriz. Rahat görmek açısından faydalıdırlar.
Preg_match_all : Bu fonksiyon sayesinde üç parametre belirleyebiliriz. İlk değer verinin çekileceği etiketlerin bulunduğu $bolme , ikinci kısım arama yaptığımız değişken ve üçüncüsü de yeni bir değişken… Bu değişkene hangi bölümü çekiyorsak onun ismini veririz. Orada eğer başlık çekiyor olsaydık tekrar bir $baslik değişkeni belirtmemiz gerekecekti. Eğer birden fazla bilgi çekeceksek şöyle bir düzenleme yapabiliriz. Onu da paylaşayım.
<?php $site = "https://siirtutkusu.com/yirminci-asra-dair"; $bolme = ('@<div id="sitxt" itemprop="articleBody">.*?</div>@si'); $bolme2 = ('@<h1 itemprop="name">.*?</h1>@si'); $bolme3 = ('@<a href="/nazim-hikmet-siirleri" class="yzr_lnk">.*?</a>@si'); $arama = file_get_contents($site); preg_match_all($bolme,$arama,$siir); preg_match_all($bolme2,$arama,$baslik); preg_match_all($bolme3,$arama,$yazar); echo '<pre>'; print_r($baslik[0][0]); print_r($siir[0][0]); print_r($yazar[0][0]); echo '</pre>'; ?>
Böylelikle başlık , şiir ve yazarı çekmiş olduk. Basit anlamda bir bot yapımıydı. Dikkat ederseniz çektikçe değerlere yeni eklemeler yapılıyor. Bunlara bağlı kalarak güzel bir bot yapabilirsiniz. Tabi pyhton ve cURL gibi olmasa da belirttiğim gibi basit anlamda güzel bir bot diyebiliriz.
Merhaba,
Php bilmesem de birkaç yıl önce işime yarar güzel bir bot yazmıştım bu anlatım sayesinde.
Başka bir çalışma için kullanmam gerekti fakat çözemediğim bir durum var.
Bot yazmak istediğim siteden almak istedim bir adet link var ve site linki javascript ile çağırıyor. Yani kaynak kodunda bu link yer almıyor fakat javascript butonuna tıklandığında link kaynak koduna gelmiş oluyor. Tabi bota o butona tıkla gelen kodu al gibi bir talimatı buradaki bot ile yapabilmek mümkün gözükmüyor. Nasıl bir yöntem izlemeliyim?
Madem o alana tıklamak gerekiyor query nimetinden yararlanın. Trigger metodu ile sanırım yapılabilir. Bir click olayı tetiklenir içerik gelir ardından inen html içinde ilgili alanı parçalar alırsınız. Eğer asp kullanıyor olsaydınız da Web browser olayı tam da bu işler için biçilmiş kaftan. Siz en iyisi bu konuyu stackoverflow da alternatif olarak aratın. Jquery işinizi görür gbi görünüyor bir noktada.