【问题标题】:PHP simple HTML DOM parser errorsPHP 简单的 HTML DOM 解析器错误
【发布时间】:2018-02-23 11:36:51
【问题描述】:

我已经开始为一个也有爬虫的网站编写爬虫,因为我需要浏览一些链接,但我收到了这个错误:

PHP 致命错误:未捕获错误:调用成员函数 find() on D:\Projekti\hemrank\simple_html_dom.php:1129 中的 null 堆栈跟踪:

0 D:\Projekti\hemrank\scrapeit.php(37): simple_html_dom->find('ul')

1 D:\Projekti\hemrank\scrapeit.php(19): ScrapeIt->getAllAddresses()

2 D:\Projekti\hemrank\scrapeit.php(55): ScrapeIt->run()

3 {main} 在 D:\Projekti\hemrank\simple_html_dom.php 第 1129 行抛出

当我对 $html 变量进行 var_dump 时,我得到了包含所有标签等的完整 html,这就是为什么它说“在 null 上调用成员函数 find()”对我来说很奇怪,而实际上在$html。这是不工作的代码部分:

        $html = new simple_html_dom();
        $html->load_file($baseurl);
        if(empty($html)){echo "HTTP Response not received!<br/>\n";exit;}
        $links = array();
        foreach ($html->find('ul') as $ul) {
            if(!empty($ul) && (count($ul)>0))
            foreach ($ul->find('li') as $li) {
                if(!empty($li) && (count($li)>0))
                foreach ($li->find('a') as $a) {
                    $links[] = $a->href;
                }
                else
                    die("NOT AVAILABLE");
            }
        }
        
        return $links;

    }

这是 PHP 简单 HTML DOM 解析器的常见问题,有解决方案还是应该切换到其他类型的抓取?

【问题讨论】:

  • PHP 不提供simple_html_dom 类。
  • 我觉得应该只是$html = file_get_html($baseurl);
  • 看到这个link
  • @axiac 不,它没有,你下载它并将它包含在你要使用它的文件中..
  • @teeyo 那就是我要问的一个问题......整个标题都说 PHP 简单 HTML DOM 错误

标签: php html


【解决方案1】:

我刚刚搜索了你正在使用的库,这是第 1129 行:

return $this->root->find($selector, $idx, $lowercase);

所以你的错误信息告诉你类中的$this-&gt;rootnull,因此不存在find() 方法!

我不是 lib 方面的专家,因为我使用了很棒的 DOMDocument 来解析 HTML,但希望这能帮助您了解发生了什么。

另外,$html 在您的代码中永远不会为空,您在实例化它时已经填充了它!

【讨论】:

  • 有可能,也可能是第一个$html-&gt;find('ul'),也就是说$html-&gt;load_file($baseurl)无法加载文件!
  • var_dump($html),看看root的实际设置是什么
【解决方案2】:

我建议进行以下更改:

$html-&gt;load_file($baseurl);$html = file_get_html($baseurl);

在我的 VPS 服务器上,它适用于 $html-&gt;load_file($baseurl);,但在我的专用本地服务器上,它仅适用于 $html = file_get_html($baseurl);

这解决了我的问题: - 在 null 上调用成员函数 find() - simple_html_dom.php 1129 行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多