@vitaliy_balahnin
Новичок в веб-разработке

Парсинг карточки товара и его итог в реальном времени?

Описание задачи: на веб-странице с полем под url и кнопкой получаем результат парсинга (название, цена, опции размера/цвета), введёного адреса. Например парсим карточку товара на сайте taobao.
Дополнительная задача: получить исходник страницы с уже выполненным js-ом.
Платформа: Ubuntu 16.04 под VirtualBox(4гб под RAM и максимум по CPU, виртуализация KVM) на домашнем ПК (интернет 100Мбит/c)
Попытки реализовать на: PhantomJS, Selenium(с различными драйверами), Scrapy, Beautuful soup (с PyQt4 + xvfb и без них).
Подопытные сайты: Taobao.com и Dns-shop.ru
Итоги: Работает, но один и тот же скрипт с одним и тем же url-ом может выполнятся до получения результатов как 5 секунд, так и до 5 минут. И естественно не только на адресах товаров Таобао, но и на DNS-shop и других российских.
5 секунд на выполнение скрипта ещё стерпеть можно, но если более, то просто нет смысла. Да знаю что у taobao есть API, но был бы доступен такой вариант, то к парсингу не обращался бы.
Как победить такую долгую задержку? Или какие ещё варианты есть?
С прямым запросом к адресу откуда ТаоБао подгружает нужные мне данные о цене/опциях и т.д. не получилось (мозгов не хватает) разобраться. Обращаясь по такому url получаю 403 error.
  • Вопрос задан
  • 503 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Verz1Lka
Web scraping expert
Попробуйте splash для рендеринга.
Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер
выполнятся до получения результатов как 5 секунд, так и до 5 минут

Я так понимаю, headless браузер запускается в одном экземпляре и все запросы идут в него? Тогда у вас просто внутри него возникают взаимные блокировки. Я когда сталкивался с подобной проблемой с ходу не смог это решить в рамках одного запущенного процесса поэтому поступил проще. В своем парсере делайте менеджер коннектов в задачи которого входит:
1) запуск дополнительных копий браузера в случае надобности;
2) гарантия, что в одну копию уходит только один запрос и пока ответ не получен, новое задание (в рамках одного домена) не может быть отправлено.

Так же замечу, что PhantomJS ветки 2 работает медленее, чем 1.9. Там, где старая версия отрабатывала за полсекунды новая думает секунду-полторы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы