Какой из вариантов лучше выбрать для парсинга на Python: aiohttp + asyncio + bs4 или requests + bs4?

Как правильно использовать aiohttp в Python 3.11 вместо requests, учитывая его асинхронную природу и связь с модулем asyncio? Возможно, стоит определить, когда лучше использовать один модуль перед другим в зависимости от конкретной задачи?
  • 17 апреля 2024 г. 7:00
Ответы на вопрос 3
Выбор между aiohttp + asyncio + bs4 и requests + bs4 зависит от конкретных потребностей проекта. 

Если вам необходимо парсить большое количество страниц с использованием асинхронности, то лучше выбрать aiohttp + asyncio + bs4. Этот набор инструментов позволит вам эффективно параллельно обрабатывать запросы к веб-страницам без блокирования основного потока выполнения. Однако, использование asyncio требует более сложной структуры кода и понимания его работы.

С другой стороны, если вам не нужна асинхронность или задача не требует параллельной обработки запросов, то requests + bs4 может быть более простым и удобным вариантом. 

Чтобы использовать aiohttp в Python 3.11 вместо requests, вам следует создать сессию aiohttp и использовать ее для выполнения запросов. Пример кода:

```python
import aiohttp
import asyncio

async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.text()

async def main():
    html = await fetch('http://example.com')
    # здесь можно обрабатывать html с помощью bs4

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```

Лучший выбор между aiohttp и requests зависит от ваших конкретных задач и требований. Если вам нужна асинхронность и параллельные запросы, то aiohttp будет лучшим выбором. Если же вам не нужна асинхронность и у вас нет специфических требований, то requests может быть более простым и удобным вариантом.
client в aiohttp позволяет делать всё тоже самое что и requests, но ты не осилил документацию 
а еще, по секрету, bs4 внезапно синхронный
Помогите разложить это по полочкам.

Зависит от задачи:
1. aiohttp + asyncio - выполнение асинхронных http запросов, без блокировки основного потока. Когда надо спарсить множество страниц без защиты, а времени в обрез.
2. requests + bs - выполнение синхронных http запросов, с блокировкой основного потока. Когда надо спарсить несколько страниц без защиты, и время не жмет.
3. selenium - когда первые 2 легли на первой же "защите на дурака". Синхронно, медленно, ресурсоёмко, максимальная человечность.
Похожие вопросы