Какими способами можно осуществлять парсинг динамических сайтов с использованием Python?

Я хочу научиться парсить динамические веб-сайты с помощью Python. Я уже освоил использование Requests и Selenium с undetected_chromedriver, но столкнулся с проблемой: мой скрипт на Python, использующий Selenium, потребляет слишком много ресурсов из-за эмуляции браузера, что затрудняет его запуск на бесплатных серверах. Существует ли способ парсить динамические сайты без необходимости эмуляции браузера? Поделитесь, пожалуйста, в каком направлении мне лучше двигаться, и какие ресурсы, статьи или видео могут помочь мне в изучении качественного парсинга сайтов.
  • 8 марта 2025 г. 15:24
Ответы на вопрос 4
Парсинг динамических сайтов — это задача, с которой сталкиваются многие разработчики, и есть несколько способов, которыми можно упростить этот процесс, избегая излишней нагрузки на ресурсы. Вот несколько подходов, которые могут вам помочь:

### 1. Использование библиотеки `requests-html`
Библиотека `requests-html` позволяет парсить контент с использованием JavaScript без необходимости открывать полноценный браузер. Она может быть полезна для некоторых сайтов:

```python
from requests_html import HTMLSession

session = HTMLSession()
response = session.get('https://example.com')
response.html.render()  # Вызов рендеринга
print(response.html.text)
```
Преимущество: она использует встроенный движок для выполнения JavaScript, не требуя много ресурсов.

### 2. Использование библиотеки `httpx` с `playwright`
`httpx` — это библиотека для асинхронных запросов, которая может работать в связке с Playwright для JavaScript-рендеринга. Этот подход может быть более легковесным, чем Selenium.

```python
import httpx
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto('https://example.com')
    content = page.content()  # Получение HTML-содержимого
    print(content)
    browser.close()
```

### 3. Использование API, если доступно
Многие динамические сайты имеют API, который можно использовать для получения данных напрямую. Проверьте, нет ли у сайта открытого API, так как это самый эффективный способ работать с данными.

### 4. Использование Scrapy с Splash
`Scrapy` — это мощный инструмент для парсинга, а `Splash` — это легковесный браузер, который может рендерить страницы. Это комбинированный подход.

```python
import scrapy
from scrapy_splash import SplashRequest

class MySpider(scrapy.Spider):
    name = 'myspider'
    
    def start_requests(self):
        yield SplashRequest('https://example.com', self.parse)

    def parse(self, response):
        self.log(response.body)
```

### Ресурсы для изучения:
1. **Документация по библиотекам:**
   - [Requests-HTML](https://requests-html.kennethreitz.org/)
   - [requests](https://docs.python-requests.org/en/latest/)
   - [Scrapy](https://docs.scrapy.org/en/latest/)
   - [Playwright](https://playwright.dev/python/docs/intro)

2. **Курсы и видео:**
   - [Coursera](https://www.coursera.org/) - по встраиванию парсинга в Python
   - [YouTube](https://www.youtube.com/) - поиск "Python web scraping tutorial" с особыми акцентами на динамические сайты
   - [Scrapy tutorials](https://docs.scrapy.org/en/latest/intro/tutorial.html)

3. **Книги:**
   - "Web Scraping with Python" by Ryan Mitchell — изучает различные подходы к парсингу, включая динамические сайты.

Выбор метода парсинга будет зависеть от специфики целевого сайта, требований к ресурсам и желании учиться. Начните с `requests-html` и Scrapy, затем переходите к более сложным инструментам, как Playwright, когда появится необходимость.
- Либо анализ http запросов и попытка обращения напрямую к ним - 
dynamic web page scraping with python , средняя сложность, максимальная производительность, легко вычисляется.
- Либо Chrome DevTools Protocol ( zendriver ) - высокая сложность, средняя производительность, тяжело вычисляется.
- Либо Selenium, простая сложность, минимальная производительность, легко вычисляется.
Не всегда, но в большинстве случаев можно ручками проанализировать куда и как javascript-код делает запросы, а потом просто повторить их в python-коде парсера.
Есть ли способ парсить динамические сайты без эмуляции браузера?
есть, но при условии что эти данные можно получить через апи, который доступен, изучай вкладку "Сеть" в инструментах разработчика.
Похожие вопросы