|
4 / 4 / 2
Регистрация: 04.04.2015
Сообщений: 186
|
||||||
Beautiful Soup 4, сравнение html-парсеров при запуске в потоке04.04.2018, 21:03. Показов 7097. Ответов 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) из кода? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 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 считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|