WebScraper显示空白页面,没有输出? PHP

时间:2016-02-09 16:51:14

标签: php domdocument

所以我试图使用DOMDocument在PHP中制作/重制Web Scraper。我必须完成的项目需要使用本机PHP,因此不使用cURL。我查看了使用reg表达式,但DOMDocument似乎更好。

无论如何我无法将其输出,我不知道为什么。我不是在说些什么吗?

<?php
class WebScraper{
private $url = 'http://todaysinfo.net/top-15-most-dangerous-airports/?utm_source=outbrain_airports&utm_campaign=outbrain_airports';
private $elements = array('title', 'p', 'img');
private $scraper_doc = null;

public function __construct($url){
    if($url){
        $this->url = $url;
        $this->scrapeData();
            if($this->scraper_doc){
                $this->parseData();
                $this->outPut();
        } else {
            echo '<p style="color: red;">Something happened with DOMDocument."';
        }
    }
}
function scrapeData(){
    $urlContents = @file_get_contents($this->$url);
    if($urlContents){
        $this->scraper_doc = new DOMDocument();
        libxml_use_internal_errors(TRUE);
        $this->scraper_doc->loadHTML($urlContents);
    } else {
        echo '<p style="color: red;">Didn\'t grab all of the contents."';
    }
}
function parseData(){   
    foreach($this->$elements as $element){
        $scraper_row = $this->scraper_doc->getElementsByTagName($element);
        foreach($scraper_row as $row){
            if($element == 'img'){
                echo $row->getAttribute('src') . "<br />";
            } else { 
                echo $row->nodeValue . "<br />";
            }
        }
    }
}
}
?>

2 个答案:

答案 0 :(得分:0)

此:

$urlContents = @file_get_contents($this->$url);
                                         ^

您没有访问在对象定义中指定的$url。您正在访问$this->null,因为在$url方法的范围内scrapeData()未定义。

php > $x = new StdClass();
php > $x->foo = 'foo';
php > var_dump($x->foo);
string(3) "foo"
php > var_dump($x->$foo);
PHP Notice:  Undefined variable: foo in php shell code on line 1
PHP Fatal error:  Cannot access empty property in php shell code on line 1

答案 1 :(得分:0)

我认为如果你改变这一行会有所帮助:

$urlContents = @file_get_contents($this->$url);

到这一行:

$urlContents = @file_get_contents($this->url);

并更改此行:

foreach($this->$elements as $element){

到这一行:

foreach($this->elements as $element){

然后,如果我像这样运行你的代码,我得到一个结果:

$webScraper = new WebScraper(null);
$webScraper->scrapeData();
$webScraper->parseData();

您还可以检查file_get_contents是否有效。如果没有,也许this page可能会对您有所帮助。