Добро пожаловать на мой новый видеоурок на YouTube, посвященный изучению пакета httpx и его возможностей для асинхронных запросов! В этом видео я не только покажу вам, как правильно выполнять асинхронные запросы с использованием httpx и callback функций, но и проведу сравнение производительности между асинхронными и синхронными запросами.
Сначала мы начнем с вводной части, где я расскажу о пакете httpx, его установке и основных возможностях. Затем мы перейдем к асинхронным запросам и я покажу вам, как эффективно использовать httpx для выполнения параллельных запросов. Вы узнаете о преимуществах асинхронности и том, как она может существенно улучшить производительность вашего кода.
Далее мы погрузимся в мир callback функций. Я подробно объясню, что такое callback функции и как их использовать с httpx для обработки ответов от сервера. Вы научитесь создавать эффективные обработчики ответов и работать с ними асинхронно, чтобы ваш код был более гибким и масштабируемым.
Но самое интересное начнется, когда мы проведем сравнение производительности между асинхронными и синхронными запросами. Я покажу вам примеры кода и выполню тесты, чтобы показать разницу во времени выполнения скрипта при использовании этих двух подходов. Вы сможете сами увидеть, насколько асинхронные запросы могут быть более эффективными и сократить время выполнения операций.
Не пропустите этот увлекательный видеоурок, где вы узнаете о пакете httpx, научитесь делать асинхронные запросы, использовать callback функции и увидите сравнение производительности между асинхронными и синхронными подходами. Подписывайтесь на мой канал, чтобы быть в курсе новых видео о разработке и программировании. Давайте начнем изучение пакета httpx и улучшение производительности ваших запросов уже сегодня!
import asyncio
import re
from bs4 import BeautifulSoup
import requests
import httpx
import time
time_start = time.time()
url = 'https://google.com'
headers = {
'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
}
async def process_request(request: httpx.Request):
print(f'Отправили {request.method} запрос на хост {request.url}.')
async def process_response(response: httpx.Response):
print(f'Статус запроса {response.status_code}')
response_result = await response.aread()
beautifulsoup: BeautifulSoup = BeautifulSoup(markup=response_result, features='lxml')
cards = beautifulsoup.find_all(name='table', class_='model-short-block')
for card in cards:
model = card.find(name='a', id=re.compile('product')).find(name='span', class_='u').text
try:
memory = card.find(name='a', id=re.compile('product')).find(name='span', class_='list-conf-name ib nobr').text
except AttributeError:
memory = 'Не указана'
try:
price = card.find(name='div', class_=re.compile('model-price-range')).find('a').text
except AttributeError:
price = 'Не указана'
output = f'{model};{memory};{price}'
out_list.append(output)
async def get_page(number: int):
async with httpx.AsyncClient(headers=headers, follow_redirects=True, event_hooks={'request': [process_request], 'response': [process_response]}) as htx:
result: httpx.Response = await htx.get(url=f'https://ek.ua/list/122/{number}/')
# TODO сделать смену прокси и юзерагента
if result.status_code != 200:
return await get_page(number=number)
async def main():
tasks = []
for page in range(0, 5):
tasks.append(get_page(number=page))
await asyncio.gather(*tasks)
with open(file='out.csv', mode='w', encoding='cp1251') as file:
file.write(f'Модель;Память;Цена\n')
for element in out_list:
file.write(element + '\n')
out_list = []
asyncio.run(main())
time_finish = time.time() - time_start
print(f'Время работы скрипта: {time_finish:.2f}')













