Получение мета-заголовка и описания

#php #html #meta-tags

#php #HTML #мета-теги

Вопрос:

У меня возникли проблемы с получением мета-описания / заголовка с этого конкретного сайта.

Вот некоторый код:

 $file = file('http://www.thegooddrugsguide.com/lsd/index.htm');
$file = implode("",$file);
if (preg_match('/<title>(.*?)</title>/is',$file,$t)) $title = $t[1];
  

Это работает с другими сайтами, но не с рассматриваемым сайтом. В чем может быть проблема?

Комментарии:

1. DO. NOT. USE. РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ. ДЛЯ. СИНТАКСИЧЕСКИЙ АНАЛИЗ. HTML.

2. лучше всего использовать DOM api php.net/manual/en/book.dom.php

3. скажи «нет» наркотикам… если нет свободного

Ответ №1:

Это должно работать нормально:

 $doc = new DOMDocument;
$doc->loadHTMLFile('http://example.com');

$title = $doc->getElementsByTagName('title');
$title = $title[0];

$metas = $doc->getElementsByTagName('meta');

foreach ($metas as $meta) {
  if (strtolower($meta->getAttribute('name')) == 'description') {
    $description = $meta->getAttribute('value');
  }
}
  

Дополнительная информация: http://www.php.net/manual/en/book.dom.php

Редактировать: эта сокращенная версия также может помочь найти описание:

 $xpath = new DOMXPath($doc);
$description = $xpath->query('//meta[@name="description"]/@content');
  

Комментарии:

1. Привет, я получаю эту ошибку: DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: Invalid char in CDATA 0x1F in http://www.thegooddrugsguide.com/lsd/index.htm, line: 1

2. Также я пытался example.com и затем я получаю эту ошибку: Cannot use object of type DOMNodeList as array

3. @johnny только что отредактировал добавление ->item(0)-> nodeValue; вместо [0]. Только что протестировал, и теперь это работает

4. Кто-то снова его изменил (или изменение не было одобрено)… Я напишу это здесь: Вместо $title = $title[0]; использования $title = $title->item(0)->nodeValue;

5. вы должны сделать $description = $meta->getAttribute('content'); вместо getAttribute('value')

Ответ №2:

 $url = "http://www.thegooddrugsguide.com/lsd/index.htm";    
$tags = get_meta_tags($url);
$description = $tags["description"];