【问题标题】:Grabbing title of a website using DOM [duplicate]使用 DOM 抓取网站的标题 [重复]
【发布时间】:2011-08-17 17:10:25
【问题描述】:

可能的重复:
Get title of website via link
How do I extract title of a website?

如何使用 PHP DOM 抓取网站的标题? (使用 PHP 获取它的最佳方式是什么?)

【问题讨论】:

    标签: php html dom


    【解决方案1】:

    您可以使用 getElementByTagName(),因为从技术上讲,您的 html 中只有一个标题属性,因此您可以抓住在 DOM 中遇到的第一个属性。

    $title = '';
    $dom = new DOMDocument();
    
    if($dom->loadHTMLFile($urlpage)) {
        $list = $dom->getElementsByTagName("title");
        if ($list->length > 0) {
            $title = $list->item(0)->textContent;
        }
    }
    

    【讨论】:

    • 领先我 10 秒,并举了一个稍微好一点的例子。删除了我的答案:)
    • @Erik 干杯。不幸的是,SO 有时感觉就像一场比赛。
    【解决方案2】:

    抑制因不正确的 HTML 或缺少元素而导致的任何解析错误:

    <?
    
    $doc = new DOMDocument();
    @$doc->loadHTML(@file_get_contents("http://www.washingtonpost.com"));
    
    // find the title
    $titlelist = $doc->getElementsByTagName("title");
    if($titlelist->length > 0){
      echo $titlelist->item(0)->nodeValue;
     }
    

    【讨论】:

    • loadHTMLFile 已经合并了 file_get_contents 并且不会在格式错误的 HTML 上给出错误,因此它产生的任何错误都是有价值的。 loadHTML 也不会在格式错误的 HTML 上给出错误。
    • 好吧,当我现在使用$doc-&gt;loadHTMLFile("http://www.washingtonpost.com"); 时,我收到一堆错误,上面写着 Warning: DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: htmlParseEntityRef: expecting ';'在washingtonpost.com 中,第 5 行的 /var/www/test/test2.php 中的第 52 行。也许是我的 PHP 版本,但是...
    • 你的权利 - 我很抱歉。我记得它会解析它,但它确实显示警告。但是,@ 抑制方法仍然是一个不好的选择。你最好设置libxml_use_internal_errors(true);,这样你就可以在需要/需要时访问错误数据
    • 要点:这又快又脏。使用错误抑制有点懒惰,我不知道它在后台使用 libxml。
    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 2018-05-23
    • 2020-03-10
    • 1970-01-01
    • 2020-03-09
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多