Странности с веб-краулерами

· автор BaRoN · На чтение уйдёт 2 минут · (266 слов)

Как-то так получилось, что последние проекты были связаны с написанием ботов-краулеров. Выяснилось несколько моментов, которые я хотел бы зафиксировать (это актуально на сентябрь 2016). Когда-то давным-давно я считал, что HtmlUnit очень крутой браузер, сейчас это один из наиболее худших вариантов - любой другой браузер лучше него, а уж если надо сэкономить ресурсы - можно взять HttpClient (и потратить побольше сил на эмуляцию).

Следующий в списке - PhantomJS. Как-то оно слегка течёт, не хочет нормально подключаться к Selenium Hub, а ещё товарищ жалуется, что после нескольких тысяч запросов Фантомы начинают зависать потихоньку. У него около 500 Фантомов, и примерно после 3000-5000 запросов, один из них подвисает. Подвисает вместе с утёкшей памятью, что через некоторое время создаёт для него проблемы.

Я организовал аналогичную систему на основе Firefox и Chrome, они поначалу потребляют больше памяти и стабильно потребляют больше процессорного времени, однако же после пары десятков тысяч запросов ситуация меняется. Chrome довольно-таки эффективно работает в 500 потоков, утечек памяти, судя по всему, нет. Firefox чуть отстаёт от Chrome по эффективности, но тоже справляется. Но главное, что уже через несколько часов работы благодаря утечкам памяти, PhantomJS начинает уступать Хрому.

Мой личный фаворит теперь - JBrowserDriver, из состава Java 8. Нативный браузер на основе Webkit, для небольших задач оказался лучшим выбором. Есть и непонятные косяки на Windows, у заказчика падало. Обновление JDK помогло, но сам факт падения браузера с формированием hs_err_pid не радует. Надеюсь, в будущих версиях JDK таких ошибок меньше будет. Главное - ресурсы жрёт по-божески, проверку «на вшивость» проходит, успешно прикидываясь настоящим браузером (всё-таки Webkit внутри).

Если что, у меня теперь краулеры можно заказывать, пришлось на этом собаку съесть.

Полезное