ФорумПрограммированиеPHP для идиотов → Парсер

Парсер

  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 4 марта 2011 г. 14:34

    Пыха Привет!

    Делаю парсер для одного сайта для гавно-сайта (сателлит)
    Нужно спиздить текст например отсюда http://www.homebusiness.ru/ideas/1592.htm

    Весь текст заключается в

    <p align="left"><font face="Verdana" size="2">

    ТЕКСТ

    </font>

    Я хз попробовал так

    <?php

    function conv($text) {
    return iconv("windows-1251", "utf-8", $text);
    }

    $string = conv(file_get_contents("http://www.homebusiness.ru/ideas/1592.htm"));
    $start = explode("<p align=\"left\"><font face=\"Verdana\" size=\"2\">", $string);

    echo $start[1];

    ?>


    массив должен выдать текст до |<font face=\"Verdana\" size=\"2\">| и после него
    $start[0] - выводит весь код сайта
    $start[1] - пуст

    Покажите пример как получить из $string текст
    Начиная с "Автор идеи:…." до "Подпишитесь прямо сейчас на рассылку…"
    текст статьи нужен но не получается =\
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 4 марта 2011 г. 16:05, спустя 1 час 31 минуту 10 секунд

    ну, для начала у них
    <font size="2" face="Verdana">
    , а не
    <font face="Verdana" size="2">

    если меня не наебывает "исходный код страницы"))

    по сабжу, дергай регуляркой… например такой:
    /(<font size="2" face="Verdana">.+)(?<=/font>)/

    не проверял, может не работать))
    Высокоуровневое абстрактное говно
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 4 марта 2011 г. 16:34, спустя 28 минут 43 секунды

    if (preg_match_all("#<font\s+size=[\"']\d[\"']\s+face=[\"']Verdana[\"'][^>]*>(.+?)</font>#si", $string, $pockets)) {
    print_r($pockets[1]);
    echo "<p>" . implode("</p><p>", $pockets[1]) . "</p>";
    }
    else {
    echo "wtfu";
    }
    Work, buy, consume, die
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 5 марта 2011 г. 10:09, спустя 17 часов 34 минуты 53 секунды

    Nyaah, Спасибо, получилось то что мне нужно.
    На этом сайте структура вывода статей не одинаковая, иногда не выводит автора
    потому что там идет

    <font color="#000000" face="Verdana" size="2">Автор идеи:


    Скрипт ищет
    <font face="Verdana" size="2">Автор идеи:

    preg_match_all("#<font\s+face=[\"']Verdana[\"']\s+size=[\"']\d[\"'][^>]*>(.+?)</font>#si", $string, $pockets)


    Что нужно в регулярку прописать чтобы не обязательно но искал и этот кусок ?
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 5 марта 2011 г. 10:23, спустя 14 минут 25 секунд

    Нормальное решение для парсинга пары строчек, но на будущее: Парсинг HTML: путь Ктулху!
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 5 марта 2011 г. 10:39, спустя 16 минут 25 секунд

    krasun,
    "использование регулярных выражений для парсинга HTML это в основном плохая идея"

    Чем парсить HTML ? про ктулху понял про html нет )
    <cthulhu>o_O</cthulhu>
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 5 марта 2011 г. 11:07, спустя 27 минут 44 секунды

    tartar, да я, наверное, плохо перевел. Но если в двух словах, то смысл такой:
    1) Использовать regex для парсинга HTML нельзя, нужно использовать специальные движки.
    2) Если нужно парсить две-три строчки и в будущем твоя программа расширятся не будет, то можно и попробовать использовать regex.
    Спустя 18 сек.
    В твоем, случае все в порядке.
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 5 марта 2011 г. 12:06, спустя 58 минут 42 секунды

    Что нужно в регулярку прописать чтобы не обязательно но искал и этот кусок ?

    #<font\s+(color="#000000"\s)?face=[\"']Verdana[\"']\s+size=[\"']\d[\"'][^>]*>(.+?)</font>#si
    Высокоуровневое абстрактное говно
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 5 марта 2011 г. 13:35, спустя 1 час 28 минут 38 секунд

    Stasovsky, Если ставить так до до для # тоже нужно поставить \# ?
    выдает ошибку

    на этом сайте который хочу парсить 101 долбаных ситуации нет стабильного тега за которого можно ухватится после 10+ страниц меняется тег и все

    вот хочу уточнить

    #(<p\salign=\"left\">)?<font\s+face=[\"']Verdana[\"']\s+size=[\"']\d[\"'][^>]*>(.+?)</font>#si
    проблема в <p align=\"left\"> его иногда нет вот, если я правильно указал выражение =\
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 5 марта 2011 г. 14:09, спустя 34 минуты 25 секунд

    ну экранируй и # и кавычки…

    101 долбаных ситуации нет стабильного тега за которого можно ухватится

    для этого и нужна регулярка))
    Высокоуровневое абстрактное говно
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 5 марта 2011 г. 14:46, спустя 36 минут 51 секунду

    вопрос в том правильно ли я поставил регулярку (<p\salign=\"left\">)? вначале, <p align="left"> иногда его его нет, вот и нужно чтобы проверяло с ним и без него

    #(<p\salign=\"left\">)?<font\s+face=[\"']Verdana[\"']\s+size=[\"']\d[\"'][^>]*>(.+?)</font>#si

    эх… возьмусь я за регулярные выражения учить >_<
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 5 марта 2011 г. 14:52, спустя 5 минут 51 секунду

    на этом сайте который хочу парсить 101 долбаных ситуации нет стабильного тега за которого можно ухватится после 10+ страниц меняется тег и все

    Вот в таких случаях используют движки и не парятся.
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 5 марта 2011 г. 15:05, спустя 13 минут 23 секунды

    krasun, поделитесь пожалуйста ссылкой на официальный сайт такого движка, если есть.
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 5 марта 2011 г. 15:26, спустя 20 минут 55 секунд

    почитай про phpQuery
  • tartar

    Сообщения: 186 Репутация: N Группа: Кто попало

    Spritz 5 марта 2011 г. 17:00, спустя 1 час 34 минуты 1 секунду

    Faster, Спасибо.

    Так же нашел PHP Simple HTML DOM Parser показался прост в использовании, посмотрим что получится.

    Stasovsky, krasun, Nyaah, Спасибо за помощь

Пожалуйста, авторизуйтесь, чтобы написать комментарий!