А пока в этом посте я затрону следующую тему...
При программировании парсера могут возникать вопросы общего плана (алгоритм, модульность, структура данных) и множество мелких вопросов (исследование исходных данных, составление регулярных выражений). Хочу привести пример хода рассуждений при составлении универсального регулярного выражения для нахождения ссылок. В свое время, когда я училась составлять регулярные выражения, наткнулась на статью PHP: Parsing HTML to find Links (специально нашла еще раз). В ней автор по полочкам описывает процесс составления регулярного выражения. Его рассуждения очень полезные. Вот почему: когда мы парсим один ресурс, на котором все ссылки оформлены по единому стандарту, — мы легко составим регулярку. Но что делать, если ресурсов много? Допустим, на одном теги написаны строчными буквами, а на другом заглавными, да еще и с дополнительными атрибутами?
Если вкратце, то автор статьи выделяет следующие шаги:
1. Составляем самое-самое простое регулярное выражение для нахождения ссылки:
/<a href=\"([^\"]*)\">(.*)<\/a>/iU
Это элементарное регулярное выражение. В нем можно выделить несколько частей:
- ссылка начинается с <a href="
- далее до следующей закрывающей скобки (") идет набор символов, представляющий собой непосредственно URL
- строка ">
- набор символов, представляющий собой текст ссылки
- окончание ссылки </a>
Далее заменяем в нем пробелы на символы пробелов.
2. Предусматриваем места для дополнительных атрибутов (сами выражения лучше посмотрите на сайте-источнике, там все красиво выделено цветом, в блоггере у меня так не получится без дополнительных хлопот :) )
3. Допускаем, что ссылка может квотироваться, а может и не квотироваться (то есть может быть и не заключена в кавычки).
4. Вносим еще несколько поправок:
- Знак "=" может быть обрамлен пробелами (но они могут и отсутствовать);
- Если нам нужны только ссылки с "http" (а не с ftp и т.д.) - отмечаем это... и т.д.
В общем, очень и очень неплохой пример стандартизации и универсализации :)
Маша, пиши, не останавливайся. все очень полезно. поставил ссылку на тебя.
ОтветитьУдалить>>Хотелось бы узнать у читателей, какие их интересуют вопросы, на примере чего лучше еще раз показать процесс создания программы.
Очень интерисует процесс разбора rss на делфях, только все в малейших подробностях, потому что в делфях я делал только маленький справочник имен и это было два года назад =) И освяти, пожалуйста, подробно процесс создания имитации браузера. Если конкретно- как заставить скрипт заходить в админку вордпресса и редактировать заметки, поля, виджеты.
Раз ты говоришь что не знаешь о чем писать- пиши об этом)) очень очень очень важно лично для меня. заранее спасибо
p.s. поставь попрошайку вебманевскую а не яндексовскую=)
ОтветитьУдалитьПривет, mr.Hide :) Хорошо, про RSS напишу еще раз с примером на Delphi. Что касается захождения скрипта в админку вордпресса... мне кажется, это нерационально и в корне неправильно - заходить всюду скриптом или какой-либо прогой. Для этого надо просто изучить структуру базы wp и работать напрямую с этой базой, генерируя к ней ddl-запросы. Структура базы подробно разобрана в инете. Чтобы наполнить базу - надо просто составить правильные insert-ы )) Все виджеты и т.д. - тоже редактируются через базу.
ОтветитьУдалитьПока тут все молчали, я подумала было расписать процесс парсинга на примере генератора контента для форума phpbb. Как раз начиная с анализа базы данных, потом о работе через Delphi с MySQL... прога бы парсила профили, темы и сообщения и записывала бы все в базу... на выходе бы получился наполненный клон форума.
Если хочешь - могу то же самое разобрать только на примере базы WordPress.
Спасибо, что читаешь))
>>Спасибо, что читаешь))
ОтветитьУдалитьСпасибо что пишешь!!! Хотя у меня двоякое чувство. С одной стороны мне это все полезно, с другой стороны мне жалко то что это открыто для всеобщего рассмотрения. хых
>>это нерационально и в корне неправильно - заходить всюду скриптом или какой-либо прогой.
вот тут поподробней, пожалуйста. Мне мой прогер на пхп сказал что так наоборот выгодней. В сравнении с постингом на вордпресс через протокол xml-rpc. Опять же, к БД я могу получить доступ только в том случае, если сайт установлен лично на моем хостинге. А если я зарегался как пользователь wordpress.com? Тогда мы уже не получим доступа в базу. Вот такая палка о двух концах.
Я вот хочу у тебя спросить. Если будет 10 000 сайтов. И все должны обрабатываться прогой. Через имитацию браузера, захода в админку. Скрипт написанный на пхп это выдержит? С распределением нагрузки во времени за счет крона... А скрипт написанный на делфи? А если не через имитацию браузера, а работу с БД напрямую? А через xml-rpc?))) Ой сколько вопросов)) Расскажи, пожалуйста, что думаешь обо всем этом. У меня пока некая каша манная в голове
кстати, делфи в свое время бросил так как на sql.ru начитался кучи мнений о том что делфи не очень-то подходит для веб-разработки. Твое мнение по этому заявлению?
ОтветитьУдалитьДа, если дневник на блог-хостинге, то SQL-запросы, конечно, не подойдут... А с php я не настолько хорошо знакома, чтобы оценить, с чем скрипты справятся, а с чем нет. Надо пробовать. К тому же, ты говоришь о таких масштабах, которые я себе даже представить не могу )))
ОтветитьУдалитьА ты хочешь, чтобы все было автоматически? То есть чтобы информация откуда-то бралась и публиковалась в дневниках? Это ж проге надо круглосуточно работать!)) Для таких целей лучше подошли бы скрипты, но опять же - не могу ничего сказать по оценке нагрузки...
Еще я знаю, что на li.ru даже создана специальная прога, которая позволяет публиковать записи в свои дневники под разными аккаунтами. Для wordpress.com официально ничего подобного нет... но, безусловно, сделать так, чтобы работать со всеми дневниками через один интерфейс - это можно без проблем.
По поводу делфей... я описываю тут все на делфях, потому что они мне ближе и потому что на основной работе я работаю именно с ними) Да, я тоже читала, что есть более подходящие инструменты для работы с вебом, но мне совсем не хочется устанавливать и с нуля изучать дотнет, например))) Тем более, что в моих планах нет пункта "распарсить весь интернет")) Для моих задач хватает утилит на делфи, мне не принципиально быстродействие и работа с объемами информации в промышленных масштабах.
>>А ты хочешь, чтобы все было автоматически? То есть чтобы информация откуда-то бралась и публиковалась в дневниках?
ОтветитьУдалитьДа, я хочу чтобы инфо из разных мест публиковалось на дневники. Причем разработана система в которой инфо разделяется, сортируется, помечается, выделяется..... Вообщем задачи проги не ограничиваются одной лишь публикацией. Вот счас когда я пробую делать на пхп в упрощенном варианте, то обработка 12 дневников занимает 2,5 минуты примерно. Хостер уже жалуется. Лимит на время выполнения скрипта не выдерживает, приходится обходить. Поэтому я все чаще поглядываю в сторону делфи. Хочу как два года назад (или уже три?:( ) начать осваивать и писать самому.
>>Еще я знаю, что на li.ru даже создана специальная прога, которая позволяет публиковать записи в свои дневники под разными аккаунтами.
Ну и на вордпресс для этих целей используется xml-rpc. Определенному файлу передается запрос с именем пользователя, паролем, тегами, заголовком, содержанием. И выполняется. Хотя это наверное не то что ты говоришь есть на лиру.
Хых....
>>Если хочешь - могу то же самое разобрать только на примере базы WordPress.
хочу)) любые уроки в создании делфийской проги для работы с вордпрессом приму с благодарностью.
Я задам один нескромный вопрос, буду рад если ответишь) Какова твоя зарплата в оффлайне? или средняя зарплата прогера-дельфиста?
Спасибо.
Я с xml-rpc не работала, не знаю)
ОтветитьУдалитьНасчет твоего замысла... Дааа, планы наполеоновские)) Зачем тебе столько дневников? На блогуне зарабатывать? А содержимое постов будешь через синонимайзер прогонять или контент будет неуникальным? Воровать контент - это же не очень хорошо ;)))) Лучше, по-моему, сделать систему полуавтоматическую и разбить процесс на 3 этапа: сбор и сортировка контента, изменение контента и утверждение плана распределения (что куда пойдет), непосредственно постинг.
А еще, на мой взгляд, лучше вложить больше труда, но перестраховаться: автоматизировать постинг не только на wordpress.com, но и на другие блог-хостинги. Во-первых, вордпресс очень тормозит (специально зашла и посмотрела), а во-вторых - надо контролировать риски. То есть вместо, допустим, 100 блогов на вордпресс.ком создаешь там только 20, еше по 20 - на ли.ру, ливджорнале, мейл.ру и т.д. И постишь в день, допустим, на 5 блогов с каждого сервера. Так тебя с твоей сеткой сложнее будет вычислить и меньше вероятность бана... хотя, если ходить через прокси... в общем, сам решай)
З/п свою здесь озвучивать не буду)) но на сколько мне известно, средняя з/п 60-80 тыс.. На хлеб с маслом хватает, но приходится ведь еще откладывать на квартиру и т.д... да еще кризис подоспел некстати и з/п перестали расти (
>>Зачем тебе столько дневников? На блогуне зарабатывать?
ОтветитьУдалитьзарабатывать. но не на блогуне=)
>>Воровать контент - это же не очень хорошо ;))))
гораздо лучше остаться жить в подъезде где живут наркоманы, кругом блевотина моча, и где норм человеки опасаются за свою жизнь?=)
выбора не остается
>>сделать систему полуавтоматическую и разбить процесс на 3 этапа: сбор и сортировка контента, изменение контента и утверждение плана распределения (что куда пойдет), непосредственно постинг.
это да. буду пробовать на делфи все это писать
>>лучше вложить больше труда, но перестраховаться: автоматизировать постинг не только на wordpress.com, но и на другие блог-хостинги.
нууу.... не один вордпресс.ком есть. есть куча других блог-хостингов на вордпрессе и есть свои сервера для вордпрессов.=) ну а лиру и прочее- это можно уже тогда когда с вордпрессом все будет готово. рациональный вполне подход)
Ясно) Ну, если что, чем смогу — помогу)) Почта в профиле указана ;)
ОтветитьУдалитьхых... ну платить мне пока нечем. Особенно если зарплата дельфистов 60-80т.р.)) Так что буду ждать новых заметок на блоге=)
ОтветитьУдалитьЭ-э-э, я не имела в виду платную помощь)))
ОтветитьУдалитьДобрый день, подскажите пожалуйста можно ли с помощью регулярных выраженй в строке вида:
ОтветитьУдалитьXXx('неизвестно','неизвестно2','...','неизвестноN')
найти все неизвестные??? Как будет выглядеть строка для поиска??
C уважением bay.