致命错误:未捕获错误:使用简单HTML DOM

时间:2016-06-18 11:49:38

标签: php web-scraping simple-html-dom

我正在使用Simple HTML DOM从我正在抓取的网站中获取元素和值。它工作得很好,但每23,000页左右,我找到了相当于404找不到的页面,其中没有正常的html结构。这会导致我想要在不破坏页面的情况下逃脱致命错误。

以下是完整的错误报告:

致命错误:未捕获错误:在C:\ xampp \ htdocs \ scrape \ simple_html_dom.php中调用null上的成员函数find():1113堆栈跟踪:#0 C:\ xampp \ htdocs \ scrape \ scrape_detailtable.php(133):simple_html_dom-> find(' div [id = detailta ...')#strong {main}抛出 C:\ xampp \ htdocs \ scrape \ simple_html_dom.php 在线 1113

以下是我的脚本中出现错误的行:

$doc = new simple_html_dom($record_content);
if ( ! is_null($doc->find("div[id=detailtable]")) ) // <-- this line

$record_content是使用cURL检索的html。

我已经尝试了

if( ! isset($doc->find("div[id=detailtable]")) ) , 
if( ! is_null($doc->find("div[id=detailtable]")) ) , 
if( ! empty($doc->find("div[id=detailtable]")) ) , and , 
if( ! $doc->find("div[id=detailtable]") )  ...

...页面不断破碎。我只是想在div [id = detailtable]存在的情况下逃避处理。

2016年6月30日更新

我在尝试不同的转义时遇到了另一个PHP错误,&#34;检测到不为空&#34;方法(也许这是PHP 7的新功能)。最后我尝试了PHP抛出这个建议的东西,以及错误:(释义)&#34;你可以使用null!==表达&#34;

现在我的代码为:if ( null !== $doc->find( 'a' ) ){

布拉赫!仍然得到&#34;未捕获错误:在null&#34;上调用成员函数find()所以我猜null!==表达式并没有真正起作用。

1 个答案:

答案 0 :(得分:1)

尝试类似的东西:

$doc = new simple_html_dom($record_content);
if ( $doc ) {
    if ( ($find = $doc->find("div[id=detailtable]")) ) {
        // do what you want with the $find variable
    }
    if ( ($find = $doc->find("div[id=detailtable2]")) ) {
        // do what you want with the $find variable
    }
    if ( ($find = $doc->find("div[id=detailtable3]")) ) {
        // do what you want with the $find variable
    }
}