在php中获取网站内容的标题

时间:2014-01-27 18:35:39

标签: php html regex dom curl

我写了一个代码来卷曲网站内容,比如facebook和google +,

 $html = file_get_contents_curl($url);

    if ($html) {
//parsing begins here:
        $doc = new DOMDocument();
        @$doc->loadHTML($html);
        $nodes = $doc->getElementsByTagName('title');

//get and display what you need:
        $title = $nodes->item(0)->nodeValue;
        $metas = $doc->getElementsByTagName('meta');

        for ($i = 0; $i < $metas->length; $i++) {
            $meta = $metas->item($i);
            if ($meta->getAttribute('name') == 'description')
                $description = $meta->getAttribute('content');
        }

........

我得到了$title = $nodes->item(0)->nodeValue;页面的标题,但我需要获取新闻或内容标题的标题(我的网址总是不是新闻网站),我不想限制自己到某个网站,我想得到网站内容标题。

例如 返回关塔那摩必须在奥巴马任期内关闭 - 俄罗斯外交部 http://rt.com/news/guantanamo-closure-russia-dolgov-245/

法国在http://www.france24.com/en/20140127-france-seeks-shed-amelie-image-50-years-after-opening-ties-with-china/

之后摆脱'Amélie'在中国关系50年后的形象

定义时刻:捕捉我们不断变化的世界 http://edition.cnn.com/2013/05/01/world/defining-moments/index.html?hpt=hp_bn3

我知道通常的方式是抓取H1H2代码,但我需要获取一些未实现新闻标题的网站的标题并使用<div>代码 例如

http://www.mehrnews.com/detail/News/2222373

更新我在google +中测试了这个link以及标题不在<h?>标签中的另一个网址,google正确返回标题,任何人都知道它是如何工作的?

1 个答案:

答案 0 :(得分:4)

请注意,正确可靠的方法是使用<title>标记。当你问起如何从其他元素中获得标题时,我的回答将会解决这个问题。

我认为没有任何完全可靠的方法可以做到这一点,但你可以让你的脚本很好地猜测标题是什么。

您发布的每个链接所需的标题都有一个共同的模式:

  1. 标题位于<h1>标记内。
  2. 标题的h1标签是页面上第一个仅包含文字的标题。
  3. 因此,这些示例的可靠脚本会在页面上找到所有<h1>标记,然后将“标题”视为仅包含文本的第一个(没有嵌套的html元素)。

    正如您现在在评论中添加更多链接 - 不要指望一个适用于所有内容的答案。任何人都可以做的最好的事情是检查元素,搜索页面源并尝试找到用于识别标题的模式。对于你帖子中的链接,我演示了这一点。如果你想找到以其他方式显示的标题,你将不得不为每个场景添加检查并希望最好。