|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||||||
Beautiful Soup 4, сравнение html-парсеров при запуске в потоке04.04.2018, 21:03. Показов 7100. Ответов 47
Метки нет (Все метки)
Здравствуйте, спарсил страницу с помощью lxml, встроенного в Beautiful Soup - выдал 30 секунд. Не поверил, начал искать ошибки и оптимизировать. Ничего конкретного не получилось, время парсинга примерна такая же. Вспомнил, что у Beautiful Soup есть еще 2 других парсера html.parser и html5lib, в итоге их результаты:
Запуск в отдельном потоке Запуск в общей программе, без создания отдельного потока html.parser:2 1.44 html5lib: 14 5.5 lxml: 30 1.24 И собственно вопрос, почему в потоке lxml так теряет в скорости? Хотя он считается самым быстрым Метод запуска потока:
Вдруг кому-то захочется спарсить эту же страницу ради спортивного интереса: https://www.mvideo.ru/smartfon... rtfony-205 . Парсить только ссылки на телефоны 1 страницы (этой). Пишите библиотеку и язык программирования для сравнения. Должен быть запрос страницы, без сохранения ее на диск, а потом ее парсинга
0
|
||||||
| 04.04.2018, 21:03 | |
|
Ответы с готовыми решениями:
47
Beautiful Soup Python Парсинг на Python с Beautiful Soup
|
|
|
|
| 04.04.2018, 22:05 | |
|
Вы чего-то не то делаете: 0.09 сек. (через Thread) на парсинг 12 ссылок этой страницы, 0.06 сек - без создания потока (очевидно, что на одну страницу использование потока дает только накладные расходы.)
Использовался только lxml - без всяких бесполезных оберток типа Beautiful Soup.
0
|
|
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
|
| 04.04.2018, 22:22 [ТС] | |
|
0
|
|
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
|||||||
| 05.04.2018, 10:54 [ТС] | |||||||
0
|
|||||||
|
Просто Лис
|
|||||||||||
| 05.04.2018, 11:50 | |||||||||||
0
|
|||||||||||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||||||||||||||||||||||
| 05.04.2018, 12:31 [ТС] | ||||||||||||||||||||||
Заменив, ваш код и если искать элемент h4, в котором находится ссылка. То выходит 0.8 Измененный ваш код:
Кликните здесь для просмотра всего текста
0
|
||||||||||||||||||||||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
|
| 05.04.2018, 13:03 [ТС] | |
|
Мне интересно как Garry Galler добился такой скорости
Причина оказалась в том, что я не посчитал главный поток.
0
|
|
|
Просто Лис
|
|
| 05.04.2018, 13:06 | |
|
На потоки парареллелится не так. Запускаем, например, 16 потоков, все в бесконечном цикле берут задания из очереди и выполняют.
То есть: 1) запускаем потоки 2) запихиваем в очередь задачи. 3) ждём пока очередь не опустеет.
0
|
|
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
|||||||
| 05.04.2018, 13:20 [ТС] | |||||||
|
Хотя нет, проблема или в очереди, или в алгоритме запуска потоков:
Добавлено через 4 минуты
В очередь будут заносится параметры городов, которые спарсятся в самом начале (в этом коде нету). Этот параметр будет добавляться к ссылке, чтобы парсить телефоны с конкретного города
0
|
|||||||
|
|
||||||||||||
| 05.04.2018, 14:46 | ||||||||||||
|
Тем более, что для web больше практична не многопоточность, а асинхронность. Но дело ваше - что использовать. Я вообще не вижу никакого смысла в распараллеливании парсинга html (на одном сайте) - он и так выполняется настолько быстро, что мы скорей получим задержку связанную с созданием потоков и переключением контекста , чем реальное ускорение. И хорошо, если сервер нас не забанит за сто запросов в секунду. Обычно сайты не разрешают делать более 1-2 запросов в сек и банят всех, кто исчерпывает определенный лимит запросов за час. Лично мне в моих грабберах чаще приходилось вводить искусственные задержки\таймауты, чтобы скрипт как можно дольше работал без бана и выкачал как можно больше.
0
|
||||||||||||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||
| 05.04.2018, 16:33 [ТС] | ||
|
0
|
||
|
|
||
| 05.04.2018, 16:52 | ||
|
Код - просто демо, и не имеет никакого отношения к реальным задачам.
0
|
||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||||
| 05.04.2018, 20:46 [ТС] | ||||
|
Добавлено через 5 минут Добавлено через 3 минуты
0
|
||||
|
|
||||
| 05.04.2018, 23:37 | ||||
|
Там не требуется создавать потоки вручную - нужно лишь передать список заданий одному из методов пула потоков. Или можно использовать класс из concurent.futures - ThreadPoolExecutor. А вообще в тренде использовать асинхронные возможности python: asyncio и синтаксис async await. Но обычная requests тут не годится - она синхронная. Впрочем, в multiprocessing.dummy эффективное число потоков можно подобрать эмпирически путем, задавая разное число воркеров и сравнивая результаты.
0
|
||||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
|||||||||
| 06.04.2018, 02:38 [ТС] | |||||||||
|
Добавлено через 45 минут Решил сравнить все приведенные библиотеки, результаты такие: concurent.futures - ThreadPoolExecutor: 248 Multiprocessing.Dumpy:253 Multiprocesssing - вообще не запустился, процессы создались, и потом программа завершилась. Почему, не знаю, хотя я его когда-то уже использовал. Также пришлось отказаться от очереди и заменить списком Код
Добавлено через 3 минуты Количество потоков/процессов - 10
0
|
|||||||||
|
Просто Лис
|
|||||||
| 06.04.2018, 04:56 | |||||||
INFO:Starting new HTTP connection (1): 11.11.11.1) и ничего нигде не лочится.Или я не понял, что она синхронная, и requests продолжает использовать общий пул соединений для всех потоков?
0
|
|||||||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||
| 06.04.2018, 11:06 [ТС] | ||
|
Добавлено через 29 минут судя по этой статье https://maxpoletaev.ru/blog/async-python, асинхронные запросы нужно только для частей работающих с вводом/выводам и работающих сетью.
0
|
||
| 06.04.2018, 11:06 | |
|
Помогаю со студенческими работами здесь
20
В чем проблема? (Beautiful Soup) Парсинг Beautiful Soup 4 и Selenium.Webdriver Beautiful Soup - существует ли ограничения на длину получаемых данных? Извлечь атрибуты a href и img src одновременно, используя Beautiful Soup Как убрать soup = BeautifulSoup (html) из кода? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|