Как извлечь данные с TradingView для последующего анализа?

Как мне извлечь текст новостей с сайта TradingView, например со страницы https://ru.tradingview.com/symbols/MOEX-DSKY/news/, если стандартный метод парсинга через requests и BeautifulSoup возвращает пустой результат, и прямое копирование текста с сайта невозможно? Возможно ли обойти эту проблему для успешного парсинга данных?
  • 5 декабря 2023 г. 12:50
Ответы на вопрос 2
Если при использовании `requests` и `BeautifulSoup` вы получаете пустой результат, скорее всего, данные на сайте TradingView загружаются динамически с помощью JavaScript. Обычный HTTP-запрос через `requests` не будет исполнять JavaScript и поэтому возвращает неполные данные страницы.

Чтобы извлечь динамически загружаемый контент, можно использовать следующие подходы:

1. **Использование Selenium**: Selenium позволяет вам автоматизировать взаимодействие с веб-браузером. С помощью Selenium WebDriver вы можете программно открыть страницу в браузере, дождаться полной загрузки контента и затем извлечь необходимые данные.

    ```python
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from webdriver_manager.chrome import ChromeDriverManager
    from bs4 import BeautifulSoup

    service = Service(ChromeDriverManager().install())
    browser = webdriver.Chrome(service=service)
    
    url = 'https://ru.tradingview.com/symbols/MOEX-DSKY/news/'
    browser.get(url)

    # Ожидание загрузки контента, возможно, понадобится использовать более умное ожидание
    browser.implicitly_wait(10)

    html = browser.page_source
    soup = BeautifulSoup(html, 'html.parser')

    # Теперь можно парсить содержимое с BeautifulSoup
    # ...

    browser.quit()
    ```

2. **Анализ сетевых запросов**: Иногда данные на динамических сайтах загружаются через AJAX-запросы к API. Откройте Инструменты разработчика в вашем веб-браузере (обычно это F12), перейдите к вкладке "Сеть" (Network) и обновите страницу. Ищите запросы, которые возвращают данные в формате JSON. Вы можете попытаться напрямую отправить запрос к этому API и получить данные.

3. **Использование сервисов для рендеринга JavaScript**: Существуют специализированные сервисы и инструменты, такие как Puppeteer, Playwright или Splash, которые позволяют рендерить страницы с JavaScript и затем получать их содержимое.

4. **Обход Cloudflare или других защит**: Если сайт использует Cloudflare для защиты от ботов и парсинга, тогда вам может потребоваться использовать специальные методы обхода или прокси-серверы, что уже выходит за рамки обычного парсинга.

Пожалуйста, имейте в виду, что для извлечения данных с веб-сайтов всегда следует уважать их политику использования и условия обслуживания, чтобы избежать нарушения законов о защите авторских прав и прав на личную информацию (например, GDPR). Также сайты часто имеют механизмы защиты от автоматизированного парсинга, поэтому ваша деятельность может быть ограничена или заблокирована.
Никак. При использование requests.get(url) - Вы получаете мгновенно тот html, который отдал сервер, без возможности чего либо дождаться. А сайт из примера - построен на React-е, т.е. динамический.Для работы с динамикой -используйте Selenium.
Похожие вопросы