![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Andrey_Skif |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 31.5.2007 Где: Волгодонск Репутация: нет Всего: нет |
Вопрос прозвучит банально - как написать парсер?
Но прежде, чем закидаете меня тапками, поясню, о чём конкретно хочу спросить. Однажды решил написать скриптик. Как водится, после десятка переписываний всего с нуля успел забыть, чего изначально то хотел. Единственное, что в концепции не изменилось - это есть парсер. Естественно, погуглил, что да как. Радостно вооружился DomDocument и DOMXPath. Распарсил страничку, содержащую два десятка ссылок на нужные мне страницы... Дальше, надеюсь, вы поняли - 30 секунд и привет. Что по этому поводу говорит гугл? Что-то типа set_time_limit(), php.ini или fork(). Однако мой виртуальный хостер на такие извраты выдавал что-то ошибочное, однотипное и про соображения безопасности. От нехватки знаний и опыта по уму сделать не удалось. В ход пошла фантазия. Сейчас сие чудо велосипедостроения выглядит так. Парсится страничка со ссылками, они вносятся в БД с пометкой "не обработано". А в конце функции file_get_contents() скармливается адресок нашего же скрипта :facepalm И вот так пока все страницы не распарсим. Сам понимаю, что бредово. Но в 15-ти минутный тур по целевым страницам это безобразие ходит даже без ошибок. И вот собственно вопрос. Как в принципе пишутся парсеры? Интересуют именно организационные вопросы. Понятно, что всё зависит от конкретной задачи. Но хотелось бы услышать тех, кто сталкивался с реалиями. А то по запросу про парсеры гугл выдает только статьи про регулярки |
|||
|
||||
krypt3r |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 3 Всего: 16 |
А в чем сакральный смысл запуска парсеров из браузера, да еще на каком-то хостинге? Ставьте PHP себе, пишите парсер, запускайте его из консоли:
|
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Все правильно сделали. Вообще на вирт хостинге лучше не экспериментировать с тайм лиимтом, а делать отложенные задания. -------------------- Amazing ![]() |
|||
|
||||
Andrey_Skif |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 31.5.2007 Где: Волгодонск Репутация: нет Всего: нет |
Изначальный сакральный смысл был вот в чем. Есть такой "замечательный" сайт как trudvsem.ru, на котором нет ни внятных разделов, ни обновления вакансий, ни api. А есть только поисковая строка. Да ещё и ссылки на вакансии динамические и меняются раз в несколько минут. Однажды зайдя на этот сайт захотел чуток облегчить себе жизнь. Мне не нужен полный список их вакансий. Мне всего-лишь нужны обновления по интересющим лично меня вакансиям. Т.е. по заходу на свою страничку я вижу небольшой список обновлений, а не поисковую строку, предлагающую мне всё сделать руками. Кстати, запуск производится не из браузера, а по расписанию, через cron (вот это ещё не доделано, но идея именно такая) |
||||
|
|||||
Andrey_Skif |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 31.5.2007 Где: Волгодонск Репутация: нет Всего: нет |
Была такая мысль. Если честно, не доразобрался. Крон задачами, вообще, можно через php-скрипты управлять? Время запуска, к примеру изменить? krypt3r, запуск из консоли логичен, но зачем тогда php? Мне c# чуток ближе, на нем ровно то же самое можно сделать, не парясь над ограничениями. Хотелось бы получать обновления периодически и не обязательно дома (с телефона, например). И ещё такой подвопрос. Пока читал про распараллеливание процессов (потоков?), наткнулся на применение веб-соккетов в php. Если опустить момент с виртуальным хостом, то имеет ли смысл их использовать при написании парсера, или это совсем другая история? |
|||
|
||||
Sun_ok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
Есть еще такая вещь:
exec('php script.php > /dev/null &'); Скрипт запускается и не ждет ответа, таким образом таймаута не будет. Но есть вероятность, что у хоста залочен exec. |
|||
|
||||
krypt3r |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: 3 Всего: 16 |
Название раздела форума, где вы разместили тему, подскажет ответ ;) Консольный парсер вы можете писать на каком угодно вам языке, хоть на ассемблере.
Вопрос странный. Любое сетевое приложение, в том числе парсеры (кроме локальных), работают на сокетах в любом случае. В PHP для получения контента страницы чаще всего используется CURL |
||||
|
|||||
Andrey_Skif |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 31.5.2007 Где: Волгодонск Репутация: нет Всего: нет |
Ага, мой косяк.
На счет соккетов имел в виду вот это Разработка многозадачных приложений на PHP V5 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |