Елена Б.
6863 сообщения
#13 лет назад
В этом деле полный нуб. Интересуют главным образом алгоритмы, как делать правильно и эффективно.
Гугл не удовлетворил...
Цель - сделать как бы поисковичек по нескольким сайтам с анимашками.
Для саморазвития.
Артем Л.
11416 сообщений
#13 лет назад
Учите регулярные выражения и curl Там все просто на самом деле.
Владимир Ф.
1322 сообщения
#13 лет назад
Меня тоже интересовало сильно пару лет назад, хочел написать, потом времени не стало, но заинтересованность осталась

Регулярки да .. просто ..
Цитата:
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.


Я думал там анализаторы dom используют. типа xpath или всяких там marpa.
На самом деле интересно не сколько сам разбор страницы а именно всякие штуки с многопоточностью, проксированием, яваскрипт ссылками, капчеломателями и прочее
Евгений О.
2989 сообщений
#13 лет назад
Если надо тырить определенные данные с кокретных страниц, то все просто решеается как Hungry_Hunter написал. А вот если нужно что-то вроде абстактного поисковика, то возни по-больше. Для начала потребуются пара функций для проверки правильности последовательности тэгов для страницы и отдельных блоков (неправильная страница/блок скорее всего потом не разберется). Потом разборщик на отдельные тэги с сохранением иеррахической привязки. Потом разбираем и анализируем содержимое каждого тэга, т.е. разделяем данные и служебную информацию. Потом придумываем критерии важности для полученных блоков данных, сортируем данные, выводим на свою страницу и наслаждаемся результатом. Потом получаем гневные письма от владельцев контента и попадание под фильтр Яндекса. Последнее особенно интересно: если использовать яндексовские поисковые результаты, то под фильтр не попадем, а если собственные, то почти наверняка, хотя конечный результат абсолютно одинаковый.
Елена Б.
6863 сообщения
#13 лет назад
Ну, с курлом дружу, регулрные слабовато, но делала мелочи. Но ведь должны быть разработаны эффективные алгоритмы... Неужели все в секрете?
Роман В.
99 сообщений
#13 лет назад
Цитата ("vovan_f"):
Я думал там анализаторы dom используют. типа xpath или всяких там marpa.

+1

Регулярками лезть в HTML - ни-ни. Используйте анализаторы, которые предоставляют DOM API, XPath. Да и для регулярок найдется применение из строчки, к примеру, "Комментарии (5)" выдрать число комментариев, и не более.
Яваскрипт, если очень нужно, запускается через гугловский V8, но с доступом к DOMу вопрос... Когда-то запускал JS код из пары строк считающий защитный код в Ответах.Майл.ру на PyV8.
Юрий Попченко
649 сообщений
#13 лет назад
Цитата ("r0b1n"):
Регулярками лезть в HTML - ни-ни. Используйте анализаторы, которые предоставляют DOM API, XPath. Да и для регулярок найдется применение из строчки, к примеру, "Комментарии (5)" выдрать число комментариев, и не более.

+1
Советую посмотреть .
Неплохая разъяснительная статья - .
Евгений О.
2989 сообщений
#13 лет назад
DOM, XPath и др. не всегда лучшее решение. Они предоставляют условно-удобный способ поиска нужных элементов, но за это приходтся расплачиваться скорость и памятью. Условно-удобный потому, что необходимо знать точное расположение нужного элемента в документе (скажем поиск только по классу может вернуть кучу элементов). В тоже время самое "навороченное" регулярное выражения для поиска по имени тэга и нескольким дополнительным параметрам (класс, ид, предшествующий/последующий тэг, владелец и т.п.) будет от силы в полсотни символов.
Елена Б.
6863 сообщения
#13 лет назад
Цитата:
http://code.google.com/p/phpquery/

jQuery переписанное на РНР? Прикольно ))) Попробую вникнуть. Спасибо.

elosoft, оно же еще и неудобочитаемо получится. И через полгода сам не вспомнишь, что тут писал и как это работает... Все-таки, в наш век высоких технологий, когда космические корабли бороздят просторы большого театра...
Евгений О.
2989 сообщений
#13 лет назад
Цитата ("floppox"):
И через полгода сам не вспомнишь, что тут писал и как это работает...

Бывает, конечно, но это не смертельно))
Цитата ("floppox"):
Все-таки, в наш век высоких технологий, когда космические корабли бороздят просторы большого театра...

Это тоже верно, но бороздить космическими кораблями в тюбетейке таджика все же наверное неправильно. Каждому фрукту свое место и время. Все же любые библиотеки хороши для достаточно глобальных задач.
Евгений О.
263 сообщения
#13 лет назад
Цитата ("floppox"):
... Но ведь должны быть разработаны эффективные алгоритмы... Неужели все в секрете?

Никаких секретов, все давным-давно известно, написаны и изданы на бумаге тома монографий. Вам надо почитать что-либо по теории языков программирования и построения компиляторов, там все формализовано и оптимальные алгоритмы получены и исследованы. Для построения парсера Вам достаточно сделать сканер и лексический анализатор (понадобятся функции getc(), ungetc()), потом написать таблицу состояний и по ней построить конечный автомат. Все это можно сделать врукопашную, но лучше использовать готовую библиотеку лексического анализатора, теорию, конечно, лучше тоже почитать. Еще, для построения парсеров есть готовые программные системы (напр. yacc, bison): Вы задаете спецификацию входного языка, на выходе получаете готовый парсер.
Елена Б.
6863 сообщения
#13 лет назад
Цитата:
почитать что-либо по теории языков программирования

Прикиньте, читала. Даже курсовые работы писала.
А вообще, слишком умничать некрасиво. За информацию спасибо.

Цитата:
phpquery

Вникла. Пожалуй, неплохо именно для тех задач, где надо парсить единичные страницы на лету. Для своей задачи даже может остановлюсь на jQueryServer, поскольку у меня нет цели утащить себе контент, а только показать его пользователю удобнее (кто знает сайты со смайлами и анимашками, листать страницы где по 12 смайлов на одну ой как неудобно).

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

Оффтопик
Цитата ("elosoft"):
Бывает, конечно, но это не смертельно))

Я себя очень не люблю в такие моменты
Роман В.
99 сообщений
#13 лет назад
elosoft, высказанное Вами может и справедливо про DOM, но не про Xpath, поиск довольно гибкий и на порядок удобнее чем хитровыдуманное регулярное выражение.
Евгений О.
2989 сообщений
#13 лет назад
r0b1n, все зависит от конкретной ситуации. Вот мне например потребовалось стырить картинку на странице. Есть только 2 якоря чтобы выудить нужную: нужное содержимое всегда внутри div class="myclass", картинка в src содержит текст /path/. У картинки нет ни id, ни class, ни style. Содержимое divа все время разное, внутри могут быть какие угодно и сколько угодно любых тегов произвольной вложенности и последовательности, в том числе и картинок, и порядок тегов и картинок тоже все время разный. С помощью регулярного выражения задача решается элементарно "!<div class=myclass.*<img+src=(/path/.*)!si, а попробуйте написать такой путь в XPath?
Роман В.
99 сообщений
#13 лет назад
elosoft, всё просто и красиво
//div//img
Евгений О.
2989 сообщений
#13 лет назад
Ну не так уж и красиво.) Про // я просто забыл.))
По наглядности ничуть не проще регулярного выражения.
Елена Б.
6863 сообщения
#13 лет назад
В принципе, это все о том, как "выдрать" конкретно взятый элемент.

Но в целом, построение алгоритма интересует.
Допустим, надо спарсить древовидное меню и организовать из него свое.

Можно выдергивать кусками - один элемент первого уровня и все его подэлементы. Потом рекурсивно разбирать каждый из кусков.
А можно сразу обходить все меню, и собирать линейный массив с указанием родительских категорий к каждому элементу.

Тут в принципе для программиста эти способы равноценны. А для сервера? Как будет быстрее?
Андрей Ч.
61 сообщение
#13 лет назад
Посмотрите вот этот блог parsing-and-i.blogspot.com , там есть примеры на дельфи и пхп.
Научится этому просто, учите основы какого-нибудь нормального языка, позволяющего работать с НТТР без особых заморочек + желательно знать регулярки/понимать, что такое DOM.

Только зачем вам оно, проще у кого-то заказать, этих кодеров парсеров тьма в инете.
Артем Л.
11416 сообщений
#13 лет назад
Цитата ("flisk88"):
Только зачем вам оно, проще у кого-то заказать, этих кодеров парсеров тьма в инете.

На все парсеры денег не напасешься, это недешевое удовольствие.
Андрей Халецкий
3562 сообщения
#13 лет назад
Цитата ("r0b1n"):
elosoft, высказанное Вами может и справедливо про DOM, но не про Xpath, поиск довольно гибкий и на порядок удобнее чем хитровыдуманное регулярное выражение.
Меня одного смутило противопоставление DOM и xPath ?