Domdocument ile içerik çekme.
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..
Php
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.
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.
GÜNCEL SORU
Tekrar merhaba arkadaşlar,
*
*
<div id="region_0" class="list">
*
*
<div class="line">
MSN:
<strong>[email protected]</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>[email protected]</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..