我以前的問題是這個parse the html data to array data in php裏面調用一個函數功能laravel 5.4
參照此Answer,我是想同樣的事情在laravel。它的實施給我的錯誤一樣DOMXPath::query(): Unable to call handler hasClasses()
然後,我使用類似下面
我laravel代碼:
function hasClasses($attrValue, $requiredClasses)
{
$requiredClasses = explode(' ', $requiredClasses);
$classes = preg_split('~\s+~', $attrValue, -1, PREG_SPLIT_NO_EMPTY);
return array_diff($requiredClasses, $classes) ? false : true;
}
function getScrapedata($keyword = 'laravel')
{
$client = new Client();
$client->setHeader('user-agent', "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3");
$crawler = $client->request('GET', 'http://duckduckgo.com/?q=' . $keyword);
$string = $crawler->filter('div#links.results')->html();
$dom = new \DOMDocument;
$state = libxml_use_internal_errors(true);
$dom->loadHTML($string);
libxml_use_internal_errors($state);
$xp = new \DOMXPath($dom);
$xp->registerNamespace('php', 'http://php.net/xpath');
$xp->registerPhpFunctions('hasClasses');
$mainDivClasses = 'result results_links results_links_deep web-result';
$childDivClasses = 'links_main links_deep result__body';
$divNodeList = $xp->query('//div[php:functionString("' . $this->hasClasses('class', $mainDivClasses) . '")]
/div[php:functionString("' . $this->hasClasses('class', $mainDivClasses) . '")]');
$array_data = [];
foreach ($divNodeList as $divNode) {
$array_data[] = [
trim($xp->evaluate('string(./h2/a[@class="result__a"])', $divNode)),
trim($xp->evaluate('string(.//a[@class="result__snippet"])', $divNode)),
trim($xp->evaluate('string(.//a[@class="result__url"])', $divNode)),
];
}
dd($array_data);
}
因此然後開始給我另一個錯誤此DOMXPath::query(): Unable to call handler()
所以實際的錯誤是在這裏:
$divNodeList = $xp->query('//div[php:functionString("'.$this->hasClasses('class',$mainDivClasses).'")]
/div[php:functionString("'.$this->hasClasses('class',$mainDivClasses).'")]');
有人可以幫我了這一點。如何完全調用函數?你能解決這個
這是在一個類內還是隻是功能? –
兩者都屬於同一班級。 @RossWilson – 06011991
@RossWilson:你有沒有得到任何解決方案? – 06011991