PHP爬虫:检查对象是否存在

时间:2012-06-30 16:35:55

标签: php dom web-crawler

我在寻找某些类/元素的页面上运行一个php脚本,如果类/元素不存在,我有时会得到“试图获取非对象的属性”错误。

我想知道如何处理此错误,以便我可以将自己的空值分配给变量,因为使用if语句或is_null似乎没有做到这一点。

查看下面的代码,以便更好地理解我的意思。

if($size = $elem->find('.size',0)->plaintext)上的

并且会为'history'元素抛出错误,因为类大小不存在。

功能:的getInfo

function getInfo($link){
   $page = file_get_html($link);        

   if($page){       
      $categoryLink = array();
      $categoryName = array();
      $categorySize = array();

      if($container = $page->find('.infoContainer',1)){

         foreach($container->find('.element') as $elem){

            if($link = $elem->find('a',0)->href){   
               $categoryLink[] = $link;
            }else{
               $categoryLink[] = "";
            }

            if($name = $elem->find('.name',0)->plaintext){
               $categoryName[] = $name;
            }else{
               $categoryName[] = "";
            }

            if($size = $elem->find('.size',0)->plaintext){
               $categorySize[] = $size;
            }else{
               $categorySize[] = 0;
            }
         }
      }
   }
}

www.example.com

<div class='infoContainer'>
   <div class='element'>
      <a href='www.example.com/physics'>
      <div class='name'>physics</div>
      <div class='size'>1000</div>
   </div>
   <div class='element'>
      <a href='www.example.com/math'>
      <div class='name'>math</div>
      <div class='size'>800</div>
   </div>
   <div class='element'>
      <a href='www.example.com/history'>
      <div class='name'>history</div>
   </div>

</div>

通话功能

getInfo("www.example.com");

1 个答案:

答案 0 :(得分:2)

在尝试访问其属性之前,您应首先检查find的结果:

$result = $elem->find('foo', 0);
if ($result) {
    $something = $result->property;
}

这适用于foreach内的所有3个检查,仅适用于不同的参数名称等。