Domdocument ile içerik çekme

fatihmert Fatih 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..

 

06-01-2014 22:54

    Php

    badyguard14 Hilmi 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.

    06-01-2014 23:05

      fatihmert Fatih 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.

       

       

      06-01-2014 23:31

        GÜNCEL SORU

        fatihmert Fatih 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..

        08-01-2014 23:44

          www.Phpkodlari.com © 2009 Herkes Php öğrenecek
          Web tasarım ve eğitim kaynağınız.