| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Парсер, 30 секунд и виртуальный хостинг |
| Автор: Andrey_Skif 21.8.2012, 00:53 |
| Вопрос прозвучит банально - как написать парсер? Но прежде, чем закидаете меня тапками, поясню, о чём конкретно хочу спросить. Однажды решил написать скриптик. Как водится, после десятка переписываний всего с нуля успел забыть, чего изначально то хотел. Единственное, что в концепции не изменилось - это есть парсер. Естественно, погуглил, что да как. Радостно вооружился DomDocument и DOMXPath. Распарсил страничку, содержащую два десятка ссылок на нужные мне страницы... Дальше, надеюсь, вы поняли - 30 секунд и привет. Что по этому поводу говорит гугл? Что-то типа set_time_limit(), php.ini или fork(). Однако мой виртуальный хостер на такие извраты выдавал что-то ошибочное, однотипное и про соображения безопасности. От нехватки знаний и опыта по уму сделать не удалось. В ход пошла фантазия. Сейчас сие чудо велосипедостроения выглядит так. Парсится страничка со ссылками, они вносятся в БД с пометкой "не обработано". А в конце функции file_get_contents() скармливается адресок нашего же скрипта :facepalm И вот так пока все страницы не распарсим. Сам понимаю, что бредово. Но в 15-ти минутный тур по целевым страницам это безобразие ходит даже без ошибок. И вот собственно вопрос. Как в принципе пишутся парсеры? Интересуют именно организационные вопросы. Понятно, что всё зависит от конкретной задачи. Но хотелось бы услышать тех, кто сталкивался с реалиями. А то по запросу про парсеры гугл выдает только статьи про регулярки |
| Автор: krypt3r 21.8.2012, 05:57 | ||
А в чем сакральный смысл запуска парсеров из браузера, да еще на каком-то хостинге? Ставьте PHP себе, пишите парсер, запускайте его из консоли:
|
| Автор: Andrey_Skif 21.8.2012, 18:50 | ||||
Изначальный сакральный смысл был вот в чем. Есть такой "замечательный" сайт как trudvsem.ru, на котором нет ни внятных разделов, ни обновления вакансий, ни api. А есть только поисковая строка. Да ещё и ссылки на вакансии динамические и меняются раз в несколько минут. Однажды зайдя на этот сайт захотел чуток облегчить себе жизнь. Мне не нужен полный список их вакансий. Мне всего-лишь нужны обновления по интересющим лично меня вакансиям. Т.е. по заходу на свою страничку я вижу небольшой список обновлений, а не поисковую строку, предлагающую мне всё сделать руками. Кстати, запуск производится не из браузера, а по расписанию, через cron (вот это ещё не доделано, но идея именно такая) |
| Автор: Andrey_Skif 21.8.2012, 19:16 | ||
Была такая мысль. Если честно, не доразобрался. Крон задачами, вообще, можно через php-скрипты управлять? Время запуска, к примеру изменить? krypt3r, запуск из консоли логичен, но зачем тогда php? Мне c# чуток ближе, на нем ровно то же самое можно сделать, не парясь над ограничениями. Хотелось бы получать обновления периодически и не обязательно дома (с телефона, например). И ещё такой подвопрос. Пока читал про распараллеливание процессов (потоков?), наткнулся на применение веб-соккетов в php. Если опустить момент с виртуальным хостом, то имеет ли смысл их использовать при написании парсера, или это совсем другая история? |
| Автор: Sun_ok 21.8.2012, 20:24 |
| Есть еще такая вещь: exec('php script.php > /dev/null &'); Скрипт запускается и не ждет ответа, таким образом таймаута не будет. Но есть вероятность, что у хоста залочен exec. |
| Автор: krypt3r 22.8.2012, 06:23 | ||||
Название раздела форума, где вы разместили тему, подскажет ответ ;) Консольный парсер вы можете писать на каком угодно вам языке, хоть на ассемблере.
Вопрос странный. Любое сетевое приложение, в том числе парсеры (кроме локальных), работают на сокетах в любом случае. В PHP для получения контента страницы чаще всего используется CURL |
| Автор: Andrey_Skif 22.8.2012, 23:10 | ||||
Ага, мой косяк.
На счет соккетов имел в виду вот это http://www.ibm.com/developerworks/ru/library/os-php-multitask/ |