|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||||||
Beautiful Soup 4, сравнение html-парсеров при запуске в потоке04.04.2018, 21:03. Показов 7734. Ответов 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
|
|
║XLR8║
|
|||
| 13.04.2018, 15:48 | |||
|
Разберистесь в чем разница между процессом и потоком, и что такое GIL в CPython,
0
|
|||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||||||||
| 13.04.2018, 16:17 [ТС] | ||||||||
|
Добавлено через 2 минуты Добавлено через 1 минуту Вот этот код Код
Добавлено через 1 минуту Если посмотрите на код, то увидите закоментированные строчки в коде, на разные способы создания потоков/процессов
0
|
||||||||
|
║XLR8║
|
|
| 13.04.2018, 16:56 | |
|
0
|
|
|
|
||
| 13.04.2018, 17:44 | ||
|
Просто подсчитайте какое число корутин у вас запускается в асинхронном коде. Оно куда больше 10. Поэтому семафор с ограничением на 10 дает бОльшую задержку. Есть выставить в семафор любое большое число (безлимит) - асинхронный код должен стать быстрее многопоточного.
0
|
||
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||
| 13.04.2018, 18:13 [ТС] | ||
|
1. ошибка raise asyncio.TimeoutError from None concurrent.futures._base.TimeoutError, как я понял, это ошибка timeout запросов. 2. максимальное количество запросов, которые мы можем отправить серверу, чтобы не получить бан. И в вопросе имелось ввиду некоторого ограничения, которые постоянно будет действовать, в данном случае макс. количество запросов.
0
|
||
|
|
|
| 13.04.2018, 19:37 | |
|
За asyncio.TimeoutError сказать ничего не могу - она возникает у меня только если я сам задам timeout (например 1\10 или 1\100 секунды для запроса страницы). По дефолту там не помню сколько, но достаточно много.
А по семафору, как я уже писал, вы неверно приравниваете выполнение 10 потоков (и фиг знает сколько заданий внутри них) и 10 корутин. Это не одно и тоже. P.S. Советую полностью отрефакторить код - он реально трудночитаемый и вчитываться в него мало кому интересно. Все url, селекторы и прочие строки не харкодятся в функциях, а определяются в переменных. В функциях нужно использовать переменные вместо строк. Пробелы. Код без пробелов - это ужас.
0
|
|
|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
|
| 19.04.2018, 19:39 [ТС] | |
|
Вообщем для себя я сделал такие выводы: в случае если есть какое то ограничение, например некоторое максимальное количество запросов для сервера, все же лучше использовать concurrent.futures+request. В случае если ограничение не маленькое, либо его вовсе нет, то лучше asyncio
0
|
|
| 19.04.2018, 19:39 | |
|
В чем проблема? (Beautiful Soup) Парсинг Beautiful Soup 4 и Selenium.Webdriver Beautiful Soup - существует ли ограничения на длину получаемых данных? Извлечь атрибуты a href и img src одновременно, используя Beautiful Soup Как убрать soup = BeautifulSoup (html) из кода? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|