我正在使用ScraperWiki构建一个简单的屏幕抓取工具,从在线商店获取链接。商店有多个页面,所以我想从第一页获取所有链接,在寻呼机中找到“下一步”按钮,转到该网址,从那里找到所有链接,转到下一页,依此类推等等。
这是我在的地方。 ScraperWiki使用简单的HTML DOM和CSS选择器:
<?php
require 'scraperwiki/simple_html_dom.php';
function nextPage(){
$next = $html->find("li.pager-next a");
$nextUrl = 'http://www.domain.com';
$nextUrl .= $next->href . "\n";
getLinks($nextUrl);
}
function getLinks($url){ // gets links from product list page
$html_content = scraperwiki::scrape($url);
$html = str_get_html($html_content);
$x = 0;
foreach ($html->find("div.views-row a.imagecache-product_list") as $el) {
$url = $el->href . "\n";
$allLinks[$x] = 'http://www.domain.com';
$allLinks[$x] .= $url;
$x++;
}
nextPage();
}
getLinks("http://www.domain.com/foo/bar");
print_r($allLinks);
?>
getLinks()
函数在不在函数中时工作正常,但是当我将它们放入函数中时,我得到“未声明的变量”错误。我的问题是:
在PHP中我可以声明在整个脚本中使用的空变量/数组,就像在Javascript中一样吗?我在Stack上看到了一些答案,似乎暗示没有必要声明,这似乎很奇怪。
答案 0 :(得分:1)
如果你已经显示了整个错误,那可能就像是
未定义的变量:$ getLinks
可能是因为你的意思是:
getLinks($nextUrl);
不是这样的:
$getLinks($nextUrl);
它在nextPage
函数之外工作正常,因为你在那里正确调用它。
答案 1 :(得分:0)
class ScraperWiki{
public $variable;
protected $variable;
private $variable;
// here you have the option of choosing how your functions and variables are treated...
private function getLinks(){...}
public function someOtherFunction(){
$this->getLinks(); //will call the function in this Class
}
}
另外你有一个语法Error $ getLinks($ nextUrl);应该是getLinks($ nextUrl)
答案 2 :(得分:0)
在其他答案的帮助下找到解决方案 - 必须在脚本开头声明$ allLinks,在任何函数之外。在Javascript中,它足以使它成为全局的,但在PHP中看起来你必须将它声明为全局INSIDE函数,如下所示:
$allLinks = array();
function foo(){
global $allLinks
...//stuff
}
这终于使我的代码正常工作。