Как сделать парсер description keywords

Тема в разделе "Как сделать...", создана пользователем lordBlack, 23 окт 2010.

Статус темы:
Закрыта.
  1. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    замучалсо...
    Как сделать парсер description keywords любого сайта?

    вообщем для title решение нашел:
    PHP:
    <?php
    //Подключаем фаил с реализацией парсера. Этот файл находиться в архиве на офсайте
    require 'simplehtmldom/simple_html_dom.php';
    //Открываем html документ 
    $html file_get_html('http://сайт.ру.ru');
    //используя при этом функцию find. Данная функция возвращает массив найденыых элементов
    //Так если нужно получить все заголовки h2 с классом art-PostHeader, то сделать это можно так 
    foreach ($html->find('title') as $g
      echo 
    $g->plaintext '
    '
    ;  
    ?>
    библиотеки взяты тут:
    http://simplehtmldom.sourceforge.net/

    но парсится только именно тег ТИТЛ
    а я хочу description keywords и т.д.
    сложностей три:
    1. декрипшн и кейвордс не отдельный тег, а метатег
    <meta name="description" content="Описаловы" />
    2. часто или даже очень часто двойные кавычки бывают одинарными типа
    <meta name='description' content='описаловы' />
    3. кодировко utf8, cp1251, koi8... но тут я вроде решение нашел унифицирования вывода...


    помогите парсер дописать парни.... или есть более простое решение мейби?
     
  2. Kewin

    Kewin Постоялец

    Регистр.:
    15 сен 2010
    Сообщения:
    73
    Симпатии:
    8
    Зачем тебе библиотеки для парсера?
    пиши на чистом пхп, используя

    preg_match
    preg_match_all

    примеров таких простых парсеров в сети полно
     
  3. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    пример можно?


    НАшел, СПасибо!
     
  4. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    Код:
    // Find all meta 
    foreach($html->find('meta ') as $element)
         if ($element->name == 'description')
           echo $element->content . '<br>';
    
    как-то так
     
  5. Delk0

    Delk0

    Регистр.:
    26 мар 2010
    Сообщения:
    284
    Симпатии:
    47
    Ну а как насчет команды php:
    get_meta_tags (string $filename, int $use_include_path=false);
    :)
     
  6. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    только не команды а функции

    Код:
    <?php
    // Assuming the above tags are at www.example.com
    $tags = get_meta_tags('http://www.example.com/');
    
    // Notice how the keys are all lowercase now, and
    // how . was replaced by _ in the key.
    echo $tags['author'];       // name
    echo $tags['keywords'];     // php documentation
    echo $tags['description'];  // a php manual
    echo $tags['geo_position']; // 49.33;-86.59
    ?>
    
    
     
    lordBlack нравится это.
  7. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    теперь вопрос)
    разные сайты имеют разную кодировку)

    как сделать чтоб парсер дергал в разных кодировках а выводил в одной, скажем UTF-8 ?
     
  8. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    1 определить кодировку
    что-то типа
    Код:
    $subject = "abcdefывапывапыв"; // Ваша строка
    $pattern = '/[а-яА-Я]+/'; // шаблон
    preg_match($pattern, $subject, $matches);
    if ( sizeof($matches) >0 ) {
    //есть кириллица
    }
    
    2 перекодировать в utf-8
    Код:
    echo iconv('Windows-1251', 'UTF-8//IGNORE', $string);
    
     
  9. Murdok

    Murdok

    Регистр.:
    1 окт 2006
    Сообщения:
    236
    Симпатии:
    84
    можно и не определяя кодировку
    PHP:
    $str mb_convert_encoding($str"UTF-8""auto");
    http://php.net/mb_convert_encoding
     
Статус темы:
Закрыта.