为什么这个PHP代码不起作用?

时间:2015-04-26 12:55:45

标签: php web-scraping simple-html-dom

这是我用来从http://www.partyhousedecorations.com抓取特定数据的代码 但是我一直收到这个错误(Fatal error: Call to a member function children() on a non-object in C:\wamp\www\webScraping\PartyHouseDecorations.php on line 8),我陷入困境,似乎无法修复它。 这是我的代码:

<?php
include_once("simple_html_dom.php");
$serv=$_GET['search'];

        $url = 'http://www.partyhousedecorations.com/category-adult-birthday-party-themes'.$serv;
        $output = file_get_html($url); 

        $arrOfStuff = $output->find('div[class=product-grid]', 0)->children();
        foreach( $arrOfStuff as $item )
        {
            echo "Party House Decorations".'<br>';
            echo $item->find('div[class=name]', 0)->find('a', 0)->innertext.'<br>'; 
            echo '<img src="http://www.partyhousedecorations.com'.$item->find('div[class=image]', 0)->find('img', 0)->src.'"><br>';
            echo str_replace('KWD', 'AED', $item->find('div[class=price]',0)->innertext.'<br>');
        }

?>

1 个答案:

答案 0 :(得分:1)

看起来$output->find('div[class=product-grid]', 0)没有使用名为children()的方法返回对象。也许它返回null或者不是对象的东西。将它放在一个单独的变量中,看看该变量的值是什么。

$what_is_this = $output->find('div[class=product-grid]', 0);
var_dump($what_is_this)

更新

我调试了你的程序,除了简单的html dom解析器外,似乎期望将类作为'div.product-grid'而不是'div[class=x]'给出,结果表明网页通过返回产品列表而不是产品网格。我在下面附上了一份工作副本。

<?php
include_once("simple_html_dom.php");
$serv=$_GET['search'];

$url = 'http://www.partyhousedecorations.com/category-adult-birthday-party-themes';
$output = file_get_html($url);

$arrOfStuff = $output->find('div.product-list', 0)->children();
foreach( $arrOfStuff as $item )
{
    echo "Party House Decorations".'<br>';
    echo $item->find('div.name', 0)->find('a', 0)->innertext.'<br>';
    echo '<img src="http://www.partyhousedecorations.com'.$item->find('div.image', 0)->find('img', 0)->src.'"><br>';
    echo str_replace('KWD', 'AED', $item->find('div.price',0)->innertext.'<br>');
}
?>