数据提取中的成员函数错误

时间:2017-10-26 06:20:27

标签: php data-extraction

我正在尝试从外部来源获取数据,但我无法获取数据,而且我正面临此错误。

  

注意:尝试在第38行的E:\ xampp \ htdocs \ test \ merit-list.php中获取非对象的属性   致命错误:在第39行的E:\ xampp \ htdocs \ test \ merit-list.php中调用null成员函数find()

这是我的代码

<?php
            require('resources/inc/simple_html_dom.php');
            $linksrc = 'http://58.65.172.36/Portal/WebSiteUpdates/Achievements.aspx';
            $curl = curl_init();
            curl_setopt_array($curl, array(
            CURLOPT_URL => $linksrc,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 3000,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
            ));
            $file = curl_exec($curl);
            $error = curl_error($curl);
            curl_close($curl);
            $dom = new simple_html_dom();
            $dom->load($file);
            $doctorDivs = $dom->find("table#Farooq", 0)->children();
            $doctors = array();
            foreach($doctorDivs as $div){
                $doctor = array();

                // line 38
                $image = $doctor["image"] = $div->find('img', 0)->src; 
                $details = $div->find('tr', 0)->find("td");
                $name = $doctor["name"] = trim($details[1]->plaintext);
                $spec = $doctor["desc"] = trim($details[2]->plaintext);

                $doctors[] = $doctor;
                echo $image;
                echo $name;
                echo $spec;
            }       

        ?>

1 个答案:

答案 0 :(得分:1)

问题是表格的第一行没有<img>,因为它是标题行,所以$div->find("img", 0)会返回null。当您尝试访问null->src时,您会收到第一个错误。

第二个错误是因为$div<tr>元素。 $div->find("tr")搜索$div的子项,但不包含$div本身,因此它始终返回null。此外,此代码也不会在标题行中生效,因为它包含<th>而不是<tr>元素。

您可以通过输入:

跳过标题行
array_shift($doctorDivs);
foreach循环之前

。这将删除数组的第一个元素。

并将$details更改为:

$details = $div->find("td");