Php simple_html_dom不返回<;h1>;元素?

Php simple_html_dom不返回<;h1>;元素?,php,parsing,web-crawler,simple-html-dom,Php,Parsing,Web Crawler,Simple Html Dom,我正在使用SIMPLE_HTML_DOM测试解析器,并在解析时 从此URL返回的HTML DOM: $oHtml = str_get_html($html); foreach($oHtml->find('h1') as $element) { echo $element->innertext; } 它没有找到H1元素。。。 我试着成功地归还了所有的div $oHtml = str

我正在使用SIMPLE_HTML_DOM测试解析器,并在解析时 从此URL返回的HTML DOM:

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
它没有找到H1元素。。。 我试着成功地归还了所有的div

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
我使用一个简单的请求来诊断此问题:

foreach($html->find('H1') as $value) { echo "<br />F: ".htmlspecialchars($value); } 
        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
有人能帮我理解这里发生了什么吗?

找到了

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
但我无法解释

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
我用另一个代码进行了测试,包括H1(大写),它成功了

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
在使用简单的HTML DOM代码时,我对“remove_noise”进行了注释,现在它可以工作了 很好,我认为这是因为这个网站有无效的HTML和 噪波消除程序删除的内容太多,并且在结束标记脚本之后没有结束:

    // $this->remove_noise("'<\s*script[^>]*[^/]>(.*?)<\s*/\s*script\s*>'is");
    // $this->remove_noise("'<\s*script\s*>(.*?)<\s*/\s*script\s*>'is");
        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
/$this->remove_noise(“']*[^/]>(.*?”);
//$this->remove_noise(“(.*?”);
谢谢大家的帮助。

试试这个

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
您还将在函数返回所有h1标记的innertext数组后使用正则表达式

        $oHtml = str_get_html($html);
        foreach($oHtml->find('h1') as $element)
        {
            echo $element->innertext;
        }
  function getH1($yourhtml)
{
    $h1tags = preg_match_all("/(<h1.*>)(\w.*)(<\/h1>)/isxmU", $yourhtml, $patterns);
    $res    = array();
    array_push($res, $patterns[2]);
    array_push($res, count($patterns[2]));
    return $res;
}
函数getH1($yourhtml) { $h1tags=preg_match_all(“/()(\w.*)()/isxmU”,$yourhtml,$patterns); $res=array(); 数组推送($res,$patterns[2]); 数组推送($res,count($patterns[2]); 返回$res; }
注意区别:
H1!=h1
。您可以打印出
$html
中的所有结果,以防丢失某些内容。您的浏览器DOM会怎么说?你链接到的页面有无效的HTML,所以PHP的解析器可能会被错误阻塞。我知道H1不是H1,但简单的HTML dom解析器通过降低输入标记和匹配标记的大小写来处理这个问题。。。(经过测试)。浏览器上显示的dom正在查找h1标记(页面上只有一个标记),该标记包含文章标题-在页面上搜索class=text20b source u将找到它。我回显$html,h1在那里!?这是非常令人困惑的…在URl中,他们使用的是H1。这超出了标准的AFAIK,可能会导致问题。请尝试下载页面并将H1更改为H1,然后进行解析,应该可以正常工作。您的代码看起来很好:)