|
0 / 0 / 0
Регистрация: 14.04.2014
Сообщений: 6
|
|||||||
Многопроцессорный парсер теряет ссылки при паринге (selenium+PhantomJS+ProcessPoolExecutor)19.08.2016, 10:31. Показов 2286. Ответов 9
Я хочу написать парер для некоторого вебсайта,
который имеет много JS кодов. Для этого я решил выб- рать связку Selenium+PhantomJS+lxml. Работаю на Python Парсер необходим достаточно быстрый, что бы обраба- тывал не менее 1000 ссылок за 1 час. Для этой цели я решил использовать многопроцессорность. (не ммного- поточночность - из-за GIL!). Для разбиения на процессы использовал concurrent.Future.ProcessPoolExecutor. Проблема в следующем, я например, даю на вход 10 ссылок, на выходе обрабатываетя в лучшем случае 9 (может и 6). Это плохо! Есть еще некоторая зависимость с увеличением количества потоков увеличивается количество утеряных ссылок. Первое что я решил сделать, это проследить где идет обрыв программы, где она перестает выполняться. (assert в моем случае на сколько я понял не пойдет, из за многопроцессорности). Тут я определил что обрыв идет в функции browser.get(l) - не загружает страницу. Я попробовал добавить time.sleep(x), потом добавил wait видимый и не видимый. Тоже ничего не из- менилось. Начал исследовать функцию get() c модуля selenium, нашел что она перезагружать с того же модуля функцию execute(), и там я залез в дебри, что мои знания не позволяют разобраться, да и времени особо нет. И в то же время, я попробвал запустить в один процесс. То есть количество процессов = 1. И тоже одна ссылка потерялась. Это навело на мысль, что возможно дело не в selenium+phantomJS, а в ProcessPoolExecutor. Я заменил этот модуль на multiproessing.Pool - и о чудо, ссылки перестали теряться. Но вместо этого появилась другая проблема, более 4 потоков не выполняет. Если ставишь больше, выдает следующую ошибку:
селениума и фантома, ProcessPoolExecutora, или я где то код написал не правильно? Как можно увеличить скорость парсинга что бы 1000 ссылок, за 1 час. ? Наконец, может есть какой то другой способ паринга динамических страниц? (само собой на питоне) Спасибо за ответы.
0
|
|||||||
| 19.08.2016, 10:31 | |
|
Ответы с готовыми решениями:
9
Парсер с использованием Selenium, phantomJS Selenium+PhantomJS PhantomJS + Selenium |
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 19.08.2016, 13:38 | |
|
Qwebkit можно использовать и там потоки или процессы не нужны будут, потому что этот модуль асинхронно работает.
0
|
|
|
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
|
|
| 19.08.2016, 14:40 | |
|
я писал такие парсеры на втором питоне используя гринлеты.
зеленые потоки * процессы. 1000 страниц на 4 процесса, по 250 страниц на процесс. с этим я думаю и 10 зеленых потоков справятся. главное одинаковых сущностей не плодить. вот у вас на каждом потоке новый браузер. а зачем, нельзя одним обойтись?
0
|
|
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 19.08.2016, 14:55 | |
|
ilnurgi, сопрограммы же не подойдут в случае работы с selenium, этот способ хорошо при работе с requests или чем-то подобным.
1
|
|
|
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
|
|
| 19.08.2016, 15:40 | |
|
alex925, наверное ты прав, да.
надо на практике глянуть
0
|
|
|
0 / 0 / 0
Регистрация: 14.04.2014
Сообщений: 6
|
|
| 19.08.2016, 17:50 [ТС] | |
|
alex925, Установил PyQt4 - попробал спарсить одну страничку, не быстрее селениума, если не дольше...
ilnurgi, поищу в ваших темах) но если не трудно, могли бы вы ссылочку бросить ?
0
|
|
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 19.08.2016, 17:59 | |
|
vetal_mart, его идея идеальна для парсинга сайтов без js, а тебе он не подходит.
Добавлено через 5 минут Вообще если хочешь почитать о сопрограммах, то читай о asyncio и aiohttp. У меня есть парсер основанный на сопрограммах, 50 страничек скачиваются и парсятся за 50 секунд.
0
|
|
|
0 / 0 / 0
Регистрация: 14.04.2014
Сообщений: 6
|
|
| 20.08.2016, 14:51 [ТС] | |
|
Благодарю. Посмотрю обязательно и отпишусь)
0
|
|
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 20.08.2016, 15:43 | |
|
P.S опписался, 50 страничек скачиваются и парсятся за 3 сек.
0
|
|
|
0 / 0 / 0
Регистрация: 14.04.2014
Сообщений: 6
|
|
| 23.08.2016, 17:01 [ТС] | |
|
попробовал вместо ProcessPoolExecutor - ThreadPoolExecutor, ссылки терять перестал. И в данном случае, работает примерно на той же скорости что и Process.
Впорос еще актуален, если есть мысли по поводу, буду благодарен.
0
|
|
| 23.08.2016, 17:01 | |
|
Помогаю со студенческими работами здесь
10
Selenium + PhantomJS + прокси Selenium + phantomjs + proxy
Selenium phantomjs скачать файл
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию.
2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|