Большое количество скриншотов с "нажатием кнопки"

Тема в разделе "Решение различных задач по парсингу", создана пользователем Fomichev, 17 апр 2018.

  1. Fomichev

    Fomichev New Member Пользователи

    Регистрация:
    30 мар 2018
    Сообщения:
    10
    Город:
    Moscow
    Есть задача по автоматизированному и регулярному парсингу сайтов.
    Помимо получения данных, есть задача создания скриншота страницы-источника данных.
    Приблизительное количество ссылок ~ 100 тыс. на сайт.
    Задачу разбил на отдельные проекты (получение ссылок, данных, скриншоты)
    Ключевой момент - перед созданием скрина необходимо "нажать" кнопку "Подробнее" на каждой страницы и вернуть в CD текст под кнопкой. Все это крутится через шустрые proxy.

    Сталкивался ли кто с подобной задачей и какие способы решения можете предложить?

    Мои изыскания:

    Первый вариант, который сделал с использованием WebApp выполняет все на 100%, но время необходимое на получение всех данных удручает :( Даже в учетом использования WAITFORSCRIPTS 1000 ссылок обрабатывается примерно 18-25 часов. Плюсы - 100% ссылок обрабатывается с одного прохода. Минусы - максимум 2 потока на ПК (не в CD, а вообще на компьютере, при попытках запуска двух копий CD из разных папок результаты плачевны)

    Второй вариант, который мною был испробован - связка PHP_SCRIPT->exec()->PhantomJs->JScript
    Минусы - танцы с бубном по кодировкам текста при возврате данных PhantomJs->PHP->CD и по настройке таймаутов как в CD так и в php. Примерно 3% ссылок не обрабатываются. Лечится дополнительным проектом, который "доделывает работу" после первого :)
    Существенно шустрее. Производительность при том же функционале - 1000 ссылок обрабатывается 2-4 часа. Не идеал, но все же.
    Вроде бы все замечательно, но некоторые сайты PhantomJs обрабатывает криво из-за неправильной обработки CSS + embeded images: скрин черный с вкраплениями текста. Проблема для PhantomJs известная, и судя по всему не будет решена.

    Третий вариант, над которым сейчас издеваюсь - puppeteer. Некоторые успехи есть, но производительность крайне низкая пока, также пытаюсь решить проблему с зависанием процесса Chromium
     
  2. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.

    Не знаю, что такое PhantomJs.

    Предполагаю, что лучше, как вариант, парсить с нескольких ПК.
     
  3. napserious

    napserious Well-Known Member Пользователи Активирован

    Регистрация:
    16 окт 2015
    Сообщения:
    324
    Возможно я могу что-то посоветовать.
    Нужна одна ссылка на сайт и пример что и как сделать.
     
    Root нравится это.
  4. inotoxic

    inotoxic Well-Known Member Пользователи

    Регистрация:
    13 сен 2015
    Сообщения:
    867
    Добрый день
    Интересно, для чего нужно делать скриншот страницы при парсинге ?
    Сверить спаршенные данные со крином? Если так, то неправильная логика обработки данных - после парсинга нужно еще проверить по скрину правильно ли спарсили

    Если, можно ссылку на сайт?
     
  5. napserious

    napserious Well-Known Member Пользователи Активирован

    Регистрация:
    16 окт 2015
    Сообщения:
    324
    Я думаю скрины для всякого можно использовать.
    Например мне раньше нужно было скринить каждые 30 сек лайв камеру, а далее заливать все фотки на сервер.
    Еще было: через flash приложение в браузере создавать логотипы по ключевикам, а далее скринить их и обрезать, так как при экспорте они были платные.
    Правда CD работал в связке с другими программами, которые выполняли все действия когда WbApp открывался.
     
  6. Fomichev

    Fomichev New Member Пользователи

    Регистрация:
    30 мар 2018
    Сообщения:
    10
    Город:
    Moscow
    Никакой сверки не надо. Скрин нужен для истории. Чтобы потом (спустя месяц/год) можно было посмотреть. Зачем это - не неведомо :)
    Ссылку на какой сайт? Если источник - то их более 250. И задача от сайта мало зависит. Интересует именно этап "ссылка->нажать кнопку->сделать скрин", но в огромных количествах и в сжатые сроки.
     
  7. Fomichev

    Fomichev New Member Пользователи

    Регистрация:
    30 мар 2018
    Сообщения:
    10
    Город:
    Moscow
    Отказался от этого варианта пока. Не удалось организовать нормально многопоточность и отслеживание зависания процесса (точнее принадлежность зависшего к конкретному потоку) :(

    В работе очередной вариант: Чистый NodeJs + Headless Chrome. Вроде бы перспективный... В один поток идеально. Решаю с многопоточностью
     
  8. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Если можно обойтись без скриншотов, почти всегда можно обойтись без WBApp. Если, как вы пишете, вам неведомо, зачем делать скрин, то делайте парсинг без скринов и WBApp - будет максимально быстро.
     
    napserious и Kreol нравится это.

Поделиться этой страницей