在 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>";
}
我打算用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>";
}