scraper函数中的PHP变量
我正在使用ScraperWiki构建一个简单的屏幕刮板,从网上商店获取链接。商店有多个页面,所以我想从第一页获取所有链接,在寻呼机中找到“下一步”按钮,转到该url,从那里找到所有链接,转到下一页,等等 这就是我要说的。ScraperWiki使用简单的HTML DOM和CSS选择器:scraper函数中的PHP变量,php,web-scraping,scraperwiki,Php,Web Scraping,Scraperwiki,我正在使用ScraperWiki构建一个简单的屏幕刮板,从网上商店获取链接。商店有多个页面,所以我想从第一页获取所有链接,在寻呼机中找到“下一步”按钮,转到该url,从那里找到所有链接,转到下一页,等等 这就是我要说的。ScraperWiki使用简单的HTML DOM和CSS选择器: <?php require 'scraperwiki/simple_html_dom.php'; function nextPage(){ $next = $html->find("li
<?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中,我可以声明在整个脚本中使用的空变量/数组吗?我在Stack上读到了一些答案,这似乎意味着不需要声明,这似乎有点奇怪。如果您显示了整个错误,可能是这样的 未定义变量:$getLinks 可能是因为你的意思是:
getLinks($nextur)代码>
不是这个:
$getLinks($nextur)代码>
它在nextPage
函数之外工作正常,因为您在那里正确地调用了它
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
}
}
另外还有一个语法错误$getLinks($nextUrl);应该是getLinks($nextUrl)在其他答案的帮助下,我自己找到了解决方案-必须在脚本开始时声明$allLinks,在任何函数之外。在Javascript中,这足以使其成为全局的,但在PHP中,似乎还必须在函数内部将其声明为全局的,如下所示:
$allLinks = array();
function foo(){
global $allLinks
...//stuff
}
这最终使我的代码正常工作。变量范围仍然存在。可以使用参数,也可以将“global
”变量邀请到每个函数中。可能重复@mario Cheers,但找不到好的引用。这里的问题是,在调用函数之前,变量没有值,所以我不能声明它们。在上面的例子中,让他们通过的最佳方式是什么?他是按程序构建的,他无意将其变成一个类。构建类并不总是最佳实践。如果您不需要OOP的功能,那么您无缘无故地增加了开销。不,我得到了:PHP注意:未定义变量:当我尝试打印($allLinks)时,第33行的/home/scriptrunner/script.PHP中的allLinks代码>在脚本的末尾。这意味着$allLinks未定义。将其定义为空数组。如果
循环的从未运行,则$allLinks从未定义代码>就在你的include之后,我想你会被设置好的。你的铲运机没有归还任何东西。