1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Про парсеры подробнее...

Тема в разделе "Web Coding", создана пользователем GROB, 2 авг 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. GROB

    GROB

    Регистр.:
    28 мар 2006
    Сообщения:
    177
    Симпатии:
    63
    С парсингом особых дел не имел, но тут решил автоматизировать работу.. поэтому хочу написать скрипт на PHP копирования(сдирания) новостей.
    На сайте как обычно краткая новость на фэйсе и ссылка на подробную.
    Алгоритм, на сколько я понимаю такой:
    1. Через курл берем страницу.
    2. Выдираем все ссылки на новости, заголовок ее и краткий текст.
    3. Закачиваем каждую страницу, и выдираем только сам текст новости.

    Допустим с 1 - все просто, но пункт 2, это все можно написать на регулярных выражениях, даже если двиг самописный?

    Кто нибудь может пояснить хотя бы как это вообще?

    А с rss так же через регулярные выражения? Если я хочу не только краткую но и полну новость себе на сайт.
     
  2. garcia

    garcia Прохожие

    Я смотрю в дриме, как устроена страница. Потом в коде пропускаю ненужные теги, чтоб добраться до нужного блока - например, в 3-ем диве по счету вложено еще 2, а там инфа. И парсю потом до закрытия этого дива. Универсальных решений не знаю.
    RSS - это XML. Есть готовые решения для парсинга XML
     
  3. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    В целом логика рассуждений у тебя правильная, но хочу дать рекомендацию. Нужно парсер делать таким образом, чтобы по какомуто критерию, скорее всего домену, вызывались разные парсеры. так как написать даже универсальную выдиралку урлов не так просто, а уж универсальное выдиранее новостей - тем более.
    В качестве примера привожу код наипростейшего парсера уролов, но во многих случаях он будет достаточен. Предупреждаю сразу применимость его к конкретному сайту нужно проверять, так например на этой сайте он найдет http://www.iespell.com] вместо http://www.iespell.com
    PHP:
    $fh fopen('store.htm','r');
    while (
    $string fgets($fh,8192))
    {
        if (
    preg_match("/(http:\/\/(:?[^\"]*))/i",$string,$match))
        {
            
    var_dump($match[1]);
        }
    }
    fclose($fh);
    Про вытаскивание линков с RSS можно почитать здесь
    http://www.scripts.com/viewscript/using-regular-expressions-to-find-rss-links-on-a-p/22398/
    p.s. Более корректный regexp для парсинга урлов можно посмотреть в любой CMSке.
    p.p.s. Могу порекомендовать хорошую книгу по RegExp Mastering Regular Expressions
    http://rapidshare.com/files/46470406/Mastering-Regular-Expressions.rar
    Пароль: nulled.ws
     
  4. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    121
    Симпатии:
    38
    Есть отличная инфа на русском
    http://pcre.ru- впринципе там вроде перевод раздела регулярках английского мана по PHP + там и примерчики есть =)
    Рсс тоже можно парсить регулярками. работает достаточно быстро.


    А от самописности двига 2 и 3 пункт не зависят особо - просто немножко может зависеть сама реализация алгоритма - классы или функции ... но это друг на друга легко переклаывается.
    свое всегда можно впихнуть. а без регулярок никуда не деться в парсинге =)
     
  5. vlam

    vlam Создатель

    Регистр.:
    27 апр 2007
    Сообщения:
    46
    Симпатии:
    9
    Ссылки можно брать из RSS. А вот что делать с изображениями? Хотелось бы скачать, именить. Может у кого есть куски рабочего кода?
    Не хочется изобретать велосипед.
     
  6. Virtual

    Virtual Создатель

    Регистр.:
    17 фев 2007
    Сообщения:
    35
    Симпатии:
    9
    Регулярки в парсинге - лучше использовать совсем по минимуму. Ибо напрягают они проц/память конкретнейшим образом... Недавно оптимизировал свой парсер форм, и, получилось его ускорить в среднем в 10 раз(!!) сведя использование регулярок к минимуму... было 0.9с на парсинг конкретно огромной формы, стало 0.09с.. так что - регулярки совсем не панацея.
    ПС. вот регулярка, отлично вытаскивающая все урлы и анкоры на странице:
    Код:
    /A[\s\r\n\t][^>]*HREF[\s]?\=[\s'\"]?([^\"'>#\s]+).*?\>(.*?)\<\/A\>/is
     
    nnmkayf нравится это.
  7. dacuan

    dacuan Писатель

    Регистр.:
    18 июн 2007
    Сообщения:
    9
    Симпатии:
    1
    Очень спорное утверждение. При разборе больших текстов использование strpos, substr с применением кучи условий может оказаться гораздо медленнее регулярки. Идеальный выход сделать две реализации и их сравнить, но такое возможно не всегда.
     
  8. Virtual

    Virtual Создатель

    Регистр.:
    17 фев 2007
    Сообщения:
    35
    Симпатии:
    9
    Вот именно путем сравнения и всевозможных замеров времени и сьедаемой памяти я и пришел к такому выводу. Последний парсер, разбирающий хтмл и формы - был написан в 4 реализациях.. одна - исключительно на стрпос/сабстр, вторая - посимвольный однократный проход, третяя - исключительно на регулярках, четвертая - комбинация стрпос/сабстр+простейшие минимальные регулярки. по всем параметрам выйграла последняя реализация. :) я бы даже сказал топ выглядит так:
    1. стрпос/сабстр+минимум простейших регулярок.
    2. стрпос/сабстр
    3. регулярки
    4. посимвольный проход (вообще дикие тормоза)..

    2 и 3 места - небольшая разница. 1 - отрыв просто дикий, от 2/3 места. 4 - отрыв такой же дикий от 2/3 места, только в сторону тормозов. :)

    а вообще, регулярки - очень удобная штука.. только, как ни крути, но в том же пхп - ой как осторожно их использовать стоит.. ибо, то что работает скажем в пхп 4.4 - может нифига не работать в пхп5.. %) разные версии pcre, и каждая глючит по своему.. да и памяти жрут совсем некисло...
     
  9. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Классно, что ты провел такое исследование. Хотелось бы еще тебя попросить протестировать регулярки на Perl - мне что то кажется, что регулярки перловые должны быстрее работать, не скажу почему - но кажется ;)

    Предлагаю провести подробное тестирование.
    Для этого прошу выложить код твоих тестов сюда, на какой-нибудь файло-обменник или мне в личку. Я со своей стороны перепишу версию регексповую на перл и проверим скорость работы в комплексе.

    Думаю эта тема будет интересна всем.
     
  10. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    121
    Симпатии:
    38
    Поддерживаю. Тема очень интересна.


    что ты вкладываешь в понятие простейших регулярок?
     
Статус темы:
Закрыта.