Domdocument ile içerik çekme.

fatihmertFatih Mert Doğancan

Merhaba arkdaşlar,

cUrl ve düzenli ifadelerimin gelişmesi açısından site bilgileri çeken botlar yapmaya çalışıyorum.

<?php

ini_set("max_execution_time", 0);
set_time_limit(0); 

$url = "**";
$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);

$icerik = curl_exec($ch);

$doc = new DomDocument();
if(@$doc->loadHTML($icerik)){
    $aLinkleri = $doc->getElementsByTagName('a');
    foreach($aLinkleri as $aLink){
        $link_ = $aLink->getAttribute('href');
        $parse = "/^showprofile.asp\?memid=[0-9]*/";
        $regexp = preg_match($parse,$link_,$yakala);
        $modifiye = isset($yakala[0]) ? $yakala[0] : "";
        $link = "**".$modifiye;
        if($link != "**"){
            //echo $link."<br />";
           
            $uye = curl_init();
            curl_setopt($uye, CURLOPT_URL, $link);
            curl_setopt($uye, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($uye, CURLOPT_USERAGENT, $user_agent);
           
            $sayfa = curl_exec($uye);
           
            $uye_doc = new DomDocument();
            if(@$uye_doc->loadHTML($sayfa)){
                $msnCeks = $uye_doc->getElementsByTagName('div');
                foreach($msnCeks as $msnCek){
                    if($msnCek->getAttribute('class') == "line"){
                        $yeniDoc = new DomDocument();
                        if(@$yeniDoc->loadHTML($yeniDoc)){
                            $yeniIceriks = $yeniDoc->getElementsByTagName('strong');
                            foreach($yeniIceriks as $yeniIcerik){
                                echo $yeniIcerik->nodeValue;
                            }
                        }
                    }
                }
            }
        }
    }
}

Kodlar yukarıdaki gibi şimdi, $uye_doc değişkeninin oluşturulduğu yere kadar her şey çalışıyor, bu değişken sayfasında şöyle bir yapı var

<div class="line">

blablab

<strong>Almak istediğim içerik</strong>

</div>

div.line'ları çekebiliyorum ama strong içeriğini çekemiyorum. Kodumda nasıl bir yanlışlık olabilir?

Yardımlarınız için teşekkür ederim.

İyi çalışmalar..

2014-01-06 22:54:54

Php

badyguard14Hilmi BORAN

Merhabalar,

Domdocument için bildiğim kadarıyla curl kullanmaya gerek yok adresi yazınca yine işlem yapabiliyorsun sayfa üzerinde çözüm için önerim geldiğin her nokta için var_dumpla kontrol et gelen verilerin tamamında sana neler dönüyor ona göre işlemlerini gerçekleştirirsin,
if($msnCek->getAttribute('class') == "line"){ 
sonra ki kısımda $msncek->firstChild->nodeValue dersen ilk çocuk nesnenin değerini alabilirsin

İyi çalışmalar.

2014-01-06 23:05:55

fatihmertFatih Mert Doğancan

Merhaba,

firstChild fonksiyonunu bilmiyordum, pc başındayken ilgileneceğim.

Bunun için teşekkür ederim.

Ayrıca cUrl kullanmamın sebebi, sitede koruma var yönlendirmeyi aktif etmessem istediğim sayfaya ulaşamıyorum.

2014-01-06 23:31:50

Edit:

GÜNCEL SORU

fatihmertFatih Mert Doğancan

Tekrar merhaba arkadaşlar,

*
*
<div id="region_0" class="list">
    *
    *
    <div class="line">
        MSN:
        <strong>xx@xxx.x</strong>
    </div>
</div>
*
*

strong içeriğini almak istiyorum.

Her şey tamam ama strong içeriğini çekemiyorum.

Taze kodlar şöyle;

<?php

ini_set("max_execution_time", 0);
set_time_limit(0); 

$web = "**"

$url = "{$web}onlineuser.asp";
$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);

$icerik = curl_exec($ch);

$doc = new DomDocument();
if(@$doc->loadHTML($icerik)){
    $aLinkleri = $doc->getElementsByTagName('a');
    foreach($aLinkleri as $aLink){
        $link_ = $aLink->getAttribute('href');
        $parse = "/^showprofile.asp\?memid=[0-9]*/";
        $regexp = preg_match($parse,$link_,$yakala);
        $modifiye = isset($yakala[0]) ? $yakala[0] : "";
        $link = $web.$modifiye;
        if($link != $web){
            $uye = curl_init();
            curl_setopt($uye, CURLOPT_URL, $link);
            curl_setopt($uye, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($uye, CURLOPT_USERAGENT, $user_agent);
            $sayfa = curl_exec($uye);
            $uye_doc = new DomDocument();
            if(@$uye_doc->loadHTML($sayfa)){
                /*
                    <div id="region_0" class="list">
                        <div class="line">
                            MSN:
                            <strong>xx@xxx.x</strong>
                        </div>
                    </div>
                */
                $msnYeni = $uye_doc->getElementById('region_0');
                if($msnYeni){
                    echo "<b>Üye kodu: </b> ".$modifiye."<br />";
                    if($msnYeni->getAttribute('class') == "line"){
                        echo $msnYeni->getElementsByTagName('strong')->item(0)->nodeValue;
                    }
                }
            }   
        }
    }
}
?>

Yardımlarınız için teşekkür edeirm..
İyi çalışmalar..

İyi akşamlar..

2014-01-08 23:44:36

phpkodlari.com © 2009 Herkes Php öğrenecek
Eglence ve Oyun: Gamikro