Grequests Python - 100 HTTP запросов за 2 секунды
Vložit
- čas přidán 23. 07. 2024
- Как быстро отправить много HTTP запросов в Python?
⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
⭐ Телеграм канал: t.me/+ZFBRE5mlwdcyNGJh
В данном видео мы рассмотрим библиотеку Grequests от разработчиков всем известной основной библиотеки Requests, которая на данный момент работает синхронно. Grequests же наследует весь функционал Requests и добавляет к нему технологию gevent, что позволяет ему работать асинхронно.
В итоге скорость запросов возрастает примерно в 20 раз.
В этом видео мы рассмотрим возможности библиотеки, сравним с Requests и Aiohttp, рассмотрим хорошие и плохие практики во время работы с данной библиотекой и рассмотрим основные ошибки новичков.
📁 Github: github.com/Zproger
📁 Все плейлисты с уроками: bit.ly/39GaY89
📁 Связаться со мной: zproger777@gmail.com
📁 Поддержать криптовалютой: github.com/Zproger/donate
Тайм-коды:
0:00 - Вступление
0:28 - Плюсы Grequests. Почему она, а не aiohttp?
1:30 - За сколько секунд Requests делает 100 запросов?
2:40 - Установка Grequests
3:13 - Принцип работы Grequests
5:38 - За сколько секунд Grequests делает 100 запросов?
5:55 - Выводим status_code каждого запроса grequests
6:32 - Обработка ошибок в запросах grequests
7:29 - Grequests imap. Должен быть быстрее map, а на деле в 10 раз медленее
8:12 - Как правильно импортировать Grequests. О Monkey Patch
9:36 - Вся полезная информация в описании под видео
Отлично, я под каждым видосом прошу бахнуть серию видосов по асинхронщине! И вот - начало положено.
Спс, бро, за годный контент.
Рад что помогает
Да, начало положено :)))
Ничено себе так, более чём в 20 раз ускорил. У тебя ролики такие разнообразные, что скоро будут ответы по всем вопросам по Python :D
Благодарю :))))
Спасибо за твой труд! Благодаря мини-курсу по парсингу написал курсач))) канал в источниках указал в знак благодарности 😙
Круто, рад что помогло
Полезно, спасибо что делаешь ролики по таким темам
Благодарю за поддержку!
Это так спасло меня! Я уже думал разбираться в асинхронности но это grequests очень прост и эффективный! Спасибо мой гуру
Наткнулся на твой канал около месяца назад, материал подаешь очень хорошо, все понятно ! Продолжай в том же духе с меня лайки, с тебя видео ! :)
Договорились :)
Оцени мой репчик
Продолжай снимать видосы, у тебя хороший и разнообразный контент
Благодарю, буду продолжать
Я не лез в код grequests но выглядит, как событийный цикл где-то внутри grrquests, что-бы не прибегать к асинку. Стоит в том числе отметить, что подобная архитектура (отправлять пачку запросов одновременно) не сильно востребована в вебе, за исключением скрапинга (да и в скрапинге тоже, со всеми осторожностями и огрничениями по времени и кол-ву запросов). В Питоновском беке чаще востребованы асинхронные запросы, чем пакеты по 100 запросов. Описанная вами архитектура кстати очень похожа (map же) на threading/multiprocessing.Pool, пока весь пакет не завершиться, то ответа не получишь, а интерактивный режим - imap, как если бы я в функциях для пула писал функционал сохранения результата.
То есть я конечно вижу, в каких ситуациях востребована пакетная обработка запросов, но это конечно весьма нишевая функция получилась.
Кстати, если семантика aiohttp не нравится, попробуйте httpx, он близок к requests по семантике и умеет работать в обоих режимах (синк/асинк)
Ты умен. Как сделать скрипт, который сможет отправлять максимально много запросов на сервер, и настраивался бы он из веб-расширения.
а вот множество запросов вот полезно если делаешь web hook server какой либо
Бывает на бэкенде полезно отправлять пачку запросов в микросервисной архитектуре, когда умный микросервис составляет ответ для клиента, в котором содержатся данные из множества микросервисов
Рассылка сообщений пользователям в телеграм боте
Спасибо за Твой труд! Было полезно.
Рад что понравилось :)
Спасибо, побольше бы такого интересного
Буду стараться
Круто) спс за твои видео
Рад что понравилось :))
Четко, спасибо!
Рад что понравилось
Ну круто же ! Спасибо
Спасибо)) не знал)) надо будет потыкать))
Да, прикольный инструмент)
Спасибо за ценные знания
Рад что принес пользу!
Очень круто и информативно !!! А главное теперь все работает намного быстрее :)
Это хорошо :)
коммент в поддержку)
супер)
благодарю!
не прокатило использовать с headers["X-Token-API"], в отличии от обычного request`a на котором работает но медленно, знает кто решение?
Интересно если сравнить тот же threading на 100 потоков с обычным request и Grequests, какой будет итоговая разница в скорости выполнения
не будет, автор сказал, что если использовать потоки, то чудо не свершится
Крутой ролик
Благодарю!
Интересненько) хотя, конкретно для себя, я вижу только применение в нагрузочном тестировании api с тредами
можно и так
Наконец будет fast requests
Да)
1:48 домен gac...) Хорошая опечатка, dungeon master одобряет
Ага)
а как-же requests с использованием Session?
Воу воу) палехче)
:))
А что лучше, быстрее и эффективнее использовать: requests-html или grequests? В requests-html, как я знаю, есть ассинхронный подход и вроде как тоже можно много запросов посылать?
Как в grequests отправлять куки, заголовки, данные?
А как использовать proxy?
Чётко
Спасибо!
Полезный пакет, будем пользоваться
:)
чётко
Благодарю
есть-ли смысл использовать Grequests для 1 запроса? и что за линукс ты используешь?
смысла нет.
Дистрибутив - Zorin OS.
Мне понадобилось 28 строк кода, чтобы очень условно, но повторить данный функционал через, как мне кажется, более логичное оборачивание aiohttp в синхронный клиент. И делал я это в метро на телефоне.
Интересно :D
Некоторые даже в метро на телефоне кодят
Он работает на питоновском map?
Спасибо
😉
Очень полезное видео! Можешь сделать видео, как защищаться от бана сайта по ip, у меня даже впн не робит, почему-то
Про парсинг
@@CalmVideo не шарю точно но возможно бан не по IP а по Mac адресу
а как получать response.text мне пишет что нет такого
Он же возвращает список насколько я помню,
нужно сначала обратиться к индексу, чтобы получить
объект grequests
Объясните пожалуйста, для чего нужны запросы?
Если можно приведите пример я так быстрее понимаю
На канале есть 2 курса по парсингу, там максимально
понятно будет :)
Классный модуль, рад что нашел у тебя данное видео, но к сожалению с помощью grequests после нескольких запросов выдает ошибку 429(too many requests), с помощью imap ошибки нет, но из-за этого скорость падает в 10 раз. Можно решить проблему с помощью time.sleep, но тогда это все похоже больше на костиль и скорость падает раз в 5.
Скорее всего на вами запрашиваемом сайте есть определенного рода защита от условно dos атаки, ограничение на количество запросов в секунду к примеру с одного IP. Соответсвенно нужно искать обходные решения на подобие использования прокси
Я конечно покажусь душнилой, но не странно ли замерять скорость imap когда у тебя есть вывод на экран? Ведь в первом случае вывод сначала ты не сделал. Понятное дело что скорость бы увеличилась не сильно, но все же print мог разительно растянуть время выполнения программы.
Я только после этого комментария вспомнил что я print в первом примере не указывал...
Тогда да, скорость будет значительно отличаться, надо бы перепроверить imap, возможно он действительно быстрее :)
А что быстрее httpx или grequest?
Было бы неплохо написать mvp тест для api, просмотры будут)
В плане с тестом через этот инструмент?
@@zproger Лучше наверное через реквест, на ваш выбор
А что за ось на видео?
Zorin Os
👍
:)
Обычно есть проблема сделать рейт лимит)) потому что у сайтов ограничение на количество запросов, иначе они просто блочат
Рандомный прокси вешаешь на каждый запрос)
Блин, а как использовать grequest с bs4? Если кто-то знает подскажите, плз. Очень надо
Просто получить ответы отдельно и уже их использовать вместе с bs4
@@zproger спасибо! :)
Астрологи объявили неделю мамкиных дудосеров
страшно
Очень страшно
Интересно если аналог этой штуки на php
что возвращает grequest.get?
Объект grequests :)
@@zproger тоесть он сам по себе не делает обращение к сайту?
Привет у меня такой вопрос во время когда я записываю команды в пайтон и допускаю ошибку я не могу стереть тот или иной символ что делать в такой ситуации?
GIL так то не блокируют I/O задачи, так как пока ожидается ответ от сервера, то GIL освобождается
А не подскажешь, что за тема PyCharm у тебя?
Github Dark
Го инструмент для дос-атак, чисто в научных целях)
Ютуб такое не любит :)
wrk , загугли)
@@zproger а мы ему не скажем
Альтернативное название ролика:
"Делаем дудосер на python"
Не совсем :)))
Тут всё таки запросы а не ддос
@@zproger а частые запросы на сервер, разве не считаются ддосом?)
@@Happ1ness нет
@@veleg как раз считаются.
Прикинь ты поставишь парсить 100 страниц.
Вот тебе и 100 запросов в один момент)
Чем не дудос?
grequests - круто, конечно
но почему не aiohttp ?
В видео говорил почему не aiohttp =)
Классно.
Прям щас нужно код в 10 раз минимум ускорить!!
А по поводу порядка импорта grequests и requests - странно как то; ведь grequests берет библиотеку requests из папки venv или, возможно, изнутри себя и содержит определенную версию requests, а сама отдельная reqursts может быть любой версии.
Да и обращение ведь происходит к методам через имя библиотеки.
Переопределения тут никакого и не будет.
В любом случае, сразу за тест.
Очень нужно.
Спасибо)
Лично я использую модуль threading
фиг знает у меня httpx 2000+ запросов в секунду шлет нагрузив при этом только 1 логическое ядро.
httpx тоже крутой)
А если сделать многоядерный ассинхронный парсер, такое возможно?) Допустим 8 ядер полностью нагрузить, и получить 16к запросов в секунду?
Для чего это нужно?)
мне кажется, или плохие люди будут делать dos и ddos атаки через такие скрипты :|
Вряд ли) Для таких атак надо знать побольше, чем просто import grequests)
Это просто ассинхронная обёртка на request, в двух словах
Ага)
а зачем нужно делать запросы на сайт?)
Для парсинга, для досс атак и по мелочи
Автоматизация действий на сайте, работа с API, парсинг.
На самом деле много чего можно сделать, на канале целых 2
курса по парсингу, в которых подробно рассказывается об этом.
@@zproger спасибо, посмотрю.
@@user-hb1ug2fs3o спасибо)
100 запросов в секунду? Может быть 100 000 https запросов в секунду? Тут да, нужно подумать.
Как нужно говнокодить, что бы 100 запросов в секунду сервак отдать не мог?
что это за редактор? или это какая-то кастомная тема PyCharm'a?
Обычный Pycharm с плагинами, на канале есть видео как сделать такой же интерфейс в Pycharm
Получился бы тот же результат, если бы делал это же самое в 40-50 потоков обычным реквестом
Раньше тестировал с потоками и вроде как это не ускоряло выполнение,
связано с тем, что в Python используется GIL. Когда нужно сделать выполнение
параллельным обычно использую multiprocessing.
@@zproger у меня есть проекты с подобной реализацией, можно добиться 150-200 запросов в секунду с помощью потоков. Как по мне асинхронность сильно переоценена в этом плане, т.к. там суть ровно такая же, пока выполняется один, скажем так поток в асинхронности, все остальные заблокированы, пока не будет IO операции
@@awdawdawdbfw Ага, только в случае с асинхронностью ты не будешь занимать все потоки процессора.. но это же не важно, правильно?)
grequests.map - это метод класса grequests а не функция
У iohttp дока так себе
Вроде неплохая =)
@@zproger на любителя)
4:51 что за кринж, по твоему если надо отправить 100000 запросов на один адрес то надо создать массив из 100000 строк? Это дичь какая-то, если этот гресквест только так работает то в топку его
Да, он так работает, потому что потом всё это передается в map, возможно есть и другие способы, но я показывал на примере документации
Интересно куда были отправлены 100 тысяч запросов? XD Я ни на что не намекаю..)
xD
Если честно мне кажется можно сделать бомбер, не так ли?
все еще zorin ))
Да)
А aiohttp покинул чат?)
Сейчас да, но скоро вступит в чат и о нем будет отдельное видео
@@zproger о-о-о, будем ждать, будем ждать!
["url"] * 100
Можно и так =)
хотел сам задушнить, но ты был первее)
Заюзал grequest, получил бан от гугла
тоже самое
9:22 неужели питон такой тупой язык где нельзя явно задать какую библиотеку использовать?
Конечно можно, тут дело не в этом, просто grequests пропатчит в памяти requests и он будет идентичный, тогда без разницы какую либу использовать, поведение будет одинаковое. Это не особенности языка, просто monkey patching создает такие костыли.
Щас бы открывать 100к процессов для отправки запросов)))) 🤡
Apache benchmark для слабых
:)
На сколько же тупо было сравнивать синхронный requests и grequests, если сам сказал, что 2 асинхронный. Сравнил бы скорость aiohttp и grequests. Бесполезное видео, сам собрал никому не нужную статистику, сам погладил себя по головке и ушёл =/
Так же создавать массив из 100 ссылок, которые одинаковые так же тупо.
Потому что разница синхронного и асинхронного подхода всегда имеет значение.
Никто никого не гладил, если бы я не сравнил скорость, Вы бы в комментариях написали что надо было её сравнить)
А список на 100 ссылок создается не просто так, почитайте документацию Grequests, он работает по такому принципу, это не я придумал.
@@zproger Так не работаеееет :D
А как работает?)
Добавлю к этому, что бывают такие случаи, когда асинхронный подход медленней синхронного из-за реализации библиотеки. Не сравнить это было бы неправильно, в итоге я бы не смог четко сказать, что асинхронная версия работает быстрее, ведь я это утверждаю, но если бы не показал в видео, то какой смысл от этого :)
Grequests создает объект, который потом переходит в map, ему нужно передавать итерируемый объект, все примеры из видео, это и примеры из офф.документации, просто они представлены более наглядно и с комментариями.
@@zproger Ты почистил мои комменты, чисти дальше. Дальше пиши свой говнокод и сравнивай то, что никто не сравнивает.
Ничего я не чистил, не забывайте что ютуб автоматически кидает подозрительные комментарии на рассмотрение. Удачи)