Python Materials For Beginners
454 subscribers
39 photos
1 video
9 files
151 links
Download Telegram
💎 httpx+selectolax. Data scraping.

Розглянимо приклад коду який наводив у чаті . Код достатньо довгий тому Git-Gist

1️⃣ Часті запити на сайт можуть призвести до:
▪️ відповіді HTTP 429 Too Many Requests
▪️ обриву з'єднання сервером
▪️ появу капчі
▪️ блокуванню по IP

Тому варто обмежувати кількість запитів у секунду. Для цього існує бібліотека asynciolimiter яка дає можливість це зробити за допомогою Limiter: перед кожним запитом варто викликати його метод limiter.wait()

2️⃣ При скрапінгу даних використовуємо сесії. Це пришвидшує виконання запитів і дає підтримку cookie.

3️⃣ Щоб згрупувати дані разом варто використовувати класи, dataclasses, NamedTuple або як я моделі pydantic

4️⃣ Код варто розбивати на функції, класи, модулі і пакети уникаючи награмодження коду. В даному прикладі я показую розбиття на ф-ції але можна було всю роботу з сайтом винести у модуль або пакет. Також можна було зробити клас QuoteScraper з відповідними методами (це дозволило б не передавати постійно session та limiter у параметрах).

📦 quote_scraper
┣━━ 📜 __init__.py
┣━━ ⚙️ config.py - константи, наприклад BASE_URL
┣━━ 🧾 schemas.py - моделі даних
┣━━ 🔎 parsers.py - функції для парсингу html
┗━━ 🕷 scrapers.py - функції для запит+парсинг
📜 main.py

Структура має бути не обов'язково така сама, але вона має
бути. Коли весь проєкт у одному файлі — це не норм.

5️⃣ Особисто я використовую такий неймінг:
5.1. Функції які займаютья парсингом HTML назвиваю як
parse_ *
5.2. Функціїї які роблять запити: scrape_*
також можна назвивати get_* або fetch_*

6️⃣
Для перевірки наявності потрібних використовую assert але можна також кидати Exception/RuntimeError

7️⃣ Використання logging дає змогу налаштовувати кількість/рівень повідомлень у консоль як власного коду так і коду використаних бібліотек.

8️⃣ Використання генераторів та ітераторів дає можливість більш гнучко використовувати написаний код. (наприклад зупинити ітерацію по сторінкам коли знайдена потрібна цитата)

#httpx #selectolax #parsing #scraping
👍1