在 PHP 中调用成员函数 find() 简单 HTML DOM

Call to a member function find() on null in PHP Simple HTML DOM

我打算用PHP简单HTMLDOM 提取 this link

中的链接

我写的代码如下:

$url = "https://www.technolife.ir/product-3303";        
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_REFERER, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$str = curl_exec($curl);
curl_close($curl);
$html_base = new simple_html_dom();

foreach($html_base->find('a') as $element) {
    echo "<pre>";
    print_r( $element->href );
    echo "</pre>";
}


但不幸的是我在 运行:

时遇到了这个错误
Call to a member function find() on null

https://www.technolife.ir/product-3303 提供 gzip 压缩的内容,即使客户端不请求压缩,因此您只会得到一堆二进制 gzip 压缩的数据,对于 simplehtmldom 来说这看起来完全是垃圾并导致它崩溃。

幸运的是 libcurl 内置了对 gzip 解压的支持,可以通过 curl_setopt($curl, CURLOPT_ENCODING, '');

启用

就是说,您应该在 simple_html_dom、

上使用 DOMDocument
$html_base = new DOMDocument();
@$html_base->loadHTML($str);
foreach($html_base->getElementsByTagName('a') as $element) {
    echo "<pre>";
    print_r( $element->getAttribute("href") );
    echo "</pre>";
}