Знаю, что тема очень много раз поднималась и закрывалась, но у меня есть возможный вариант решения сабжа.
Для поддержки Javascript сайтов предлагаю сделать отдельный парсер по аналогии с Net::HTTP или опцию в этом парсере.
Работать парсер будет так:
1) при запуске task стартует процесс phantomjs (http://phantomjs.org), который поднимает веб-сервер на порту port, закрепленном за данным task
2) апарсер для каждого query отправляет HTTP запрос на http://localhost:port c необходимыми ему параметрами: url, http_headers и др.
3) phantomjs получив такой HTTP запрос, открывает новую страницу и совершает запрос к url с заданными параметрами, после чего ждет пока не наступит таймаут или не выполнится условие "check content regex" из параметров парсера (при этом проверка идет не по html ответу сервера, а по html, отрендеренному в браузере).
4) phantomjs возвращает отрендеренный html код в апарсер в ответе на HTML запрос из п.2
5) апарсер продолжает обработку query, после чего переходит к следующему.
6) после завершения task апарсер посылает в phantomjs запрос, который инициирует процедуру выключения phantomjs
Отвечу на вопросы, которые могут сразу возникнуть:
1) да, веб-сервер, который поднимает phantomjs многопоточный
2) да, phantomjs имеет опцию для смены proxy в процессе работы (runtime)
Со своей стороны готов полностью взять на себя разработку js кода для phantomjs (например, за пожизненные бесплатные обновления апарсера).
Для поддержки Javascript сайтов предлагаю сделать отдельный парсер по аналогии с Net::HTTP или опцию в этом парсере.
Работать парсер будет так:
1) при запуске task стартует процесс phantomjs (http://phantomjs.org), который поднимает веб-сервер на порту port, закрепленном за данным task
2) апарсер для каждого query отправляет HTTP запрос на http://localhost:port c необходимыми ему параметрами: url, http_headers и др.
3) phantomjs получив такой HTTP запрос, открывает новую страницу и совершает запрос к url с заданными параметрами, после чего ждет пока не наступит таймаут или не выполнится условие "check content regex" из параметров парсера (при этом проверка идет не по html ответу сервера, а по html, отрендеренному в браузере).
4) phantomjs возвращает отрендеренный html код в апарсер в ответе на HTML запрос из п.2
5) апарсер продолжает обработку query, после чего переходит к следующему.
6) после завершения task апарсер посылает в phantomjs запрос, который инициирует процедуру выключения phantomjs
Отвечу на вопросы, которые могут сразу возникнуть:
1) да, веб-сервер, который поднимает phantomjs многопоточный
2) да, phantomjs имеет опцию для смены proxy в процессе работы (runtime)
Со своей стороны готов полностью взять на себя разработку js кода для phantomjs (например, за пожизненные бесплатные обновления апарсера).
Последнее редактирование: