• 02-01-2011, 18:22:03
    #1
    Şöyle bir kod yazmaya çalıştım. Amaç IMDB sitesindeki kişilerin istediğim bilgilerini çekmek. Aşağıdaki kod ile sadece isimlerini çekiyorum explode ile. Ama biyografi kısmını çekemiyorum.

    for($isim_say=1; $isim_say<50; $isim_say++) {
    	if($isim_say <= 9) {
    			
    		$imdb_link = "http://www.imdb.com/name/nm000000".$isim_say."/bio";		
    		$goster = file_get_contents($imdb_link);
    		$baslik = explode('<a class="main" href="/name/nm000000'.$isim_say.'/">', $goster);
    		$baslik = explode('</a>',$baslik[1]);
    
    		echo $baslik[0] . '<br />';
    			}
    			
    	elseif($isim_say <= 99) {
    		$imdb_link = "http://www.imdb.com/name/nm00000".$isim_say;
    			
    		$goster = file_get_contents($imdb_link);
    		$baslik = explode('<a class="main" href="/name/nm00000'.$isim_say.'/">', $goster);
    		$baslik = explode('</a>',$baslik[1]);
    			
    		echo $baslik[0] . '<br />';
    			}
    }
    Biyografi kısmı,

    <h5>Mini Biography</h5>
    <p>XXXXXX</p>

    şeklinde <p> </p> etiketinin arasında. Kaynak kodunda sadece 1 tane <p> </p> olsa belki çekebilirdim veriyi ama onlarca var. Yukarıdaki kodda preg_match kullanarak nasıl bir ekleme yapıp istediğim yerdeki veriyi çekebilirim acaba?
  • 02-01-2011, 18:38:31
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    <?php
    
    $data = '<h5>Mini Biography</h5> 
    <p>XXXXXX</p>';
    
    $mini_biography = preg_match('~<h5>Mini Biography<\/h5>\s+<p>(.?+)<\/p>~m', $data, $match) ? $match[1] : 'Biyografi Alınamadı';
    
    echo $mini_biography;
    
    ?>
  • 02-01-2011, 18:58:53
    #3
    Öncelikle teşekkürler. $data değişkeni kafamı karıştırdı.

    http://www.imdb.com/name/nm0000001/bio
    http://www.imdb.com/name/nm0000002/bio
    http://www.imdb.com/name/nm0000003/bio
    http://www.imdb.com/name/nm0000004/bio

    Şeklinde, for döngüsünde bulunan linklerdeki veriyi nasıl çekebilirim? Malum hepsinin biyografisi farklı.
  • 02-01-2011, 19:08:00
    #4
    rea_secret adlı üyeden alıntı: mesajı görüntüle
    Öncelikle teşekkürler. $data değişkeni kafamı karıştırdı.

    http://www.imdb.com/name/nm0000001/bio
    http://www.imdb.com/name/nm0000002/bio
    http://www.imdb.com/name/nm0000003/bio
    http://www.imdb.com/name/nm0000004/bio

    Şeklinde, for döngüsünde bulunan linklerdeki veriyi nasıl çekebilirim? Malum hepsinin biyografisi farklı.
    for içinde tanımlarsanız çekip yenisi geldikçe üstüne yazacaktır zaten daha sonra alt satırda çekme işlemlerini yaparsınız

    $adres='http://www.imdb.com/name/nm0000001/bio';
    $data=file_get_contents($adres);
  • 02-01-2011, 19:27:35
    #5
    Kodların bütünü bir for döngüsü içinde bulunuyor. Ama yine de "Biyografi Alınamadı" hatasını alıyorum.
  • 02-01-2011, 19:59:05
    #6
    <p></p> etiketleri arasını almakla uğraşmaktansa. İlk p etiketinden önceki ve sonraki ilk id, class veya name özelliği olan etiketleri belirtin. Sonra arasındaki bütün p'leri alırsınız. Şunun gibi:

    $html = '
    <div>
       <div id="asd">!-- her sayfada farklı olan bi yazı --</div>
       <div>!-- her sayfada farklı olan bi yazı --</div>
       <p>qqq</p>
       <p>qqq</p>
    </div>
    <input name="qqq" />';
    
    preg_match('~id\="asd">([^<]*)<\/div>\s*<div>([^<]*)<\/div>\s*(.*)\s*<\/div>\s*<input name\="qqq" \/>~si', $html, $match);
    
    $ps = $match[3];
    
    echo $ps;
  • 02-01-2011, 20:19:11
    #7
    Hkan adlı üyeden alıntı: mesajı görüntüle
    <p></p> etiketleri arasını almakla uğraşmaktansa. İlk p etiketinden önceki ve sonraki ilk id, class veya name özelliği olan etiketleri belirtin. Sonra arasındaki bütün p'leri alırsınız. Şunun gibi:

    $html = '
    <div>
       <div id="asd">!-- her sayfada farklı olan bi yazı --</div>
       <div>!-- her sayfada farklı olan bi yazı --</div>
       <p>qqq</p>
       <p>qqq</p>
    </div>
    <input name="qqq" />';
    
    preg_match('~id\="asd">([^<]*)<\/div>\s*<div>([^<]*)<\/div>\s*(.*)\s*<\/div>\s*<input name\="qqq" \/>~si', $html, $match);
    
    $ps = $match[3];
    
    echo $ps;
    Meslea, http://www.imdb.com/name/nm0000001/bio sayfasındaki Mini Biography kısmını dediğin şekilde sen nasıl alırdın? Ben yapamadım.
  • 02-01-2011, 20:37:55
    #8
    $veri = file_get_contents("http://www.imdb.com/name/nm0000001/bio");
    preg_match("@<h5>Mini Biography</h5(.*?)p>(.*?)</p>@is",$veri,$cikti);
    echo $cikti[2];
  • 02-01-2011, 20:46:36
    #9
    Teşekkürler LaCReMeL. Tam olarak istediğim şekilde çalışıyor kod. İlgilenen herkese de ayrıca teşekkürler...