Парсинг Screener TradingView на Python
Table Of Content
- Настройка окружения
- Изучение скринера TradingView
- Парсинг TradingView скринера
- Определение параметров поиска
- Отправка POST-запроса
- Отправка POST-запроса с заголовками и параметрами
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
- 'Referer': 'https://www.tradingview.com/screener/'
- Парсинг JSON-ответа
- Заключение
- Надеюсь, этот статья поможет вам и приятного кодинга!😄
TradingView - популярная платформа для трейдеров, которая позволяет анализировать финансовые рынки и принимать торговые решения. Одной из ее функций является скринер, который позволяет пользователям фильтровать и сортировать акции по различным критериям.
Однако TradingView не предоставляет API для скринера, что означает, что нам нужно спарсить данные, если мы хотим использовать их в нашем собственном приложении. В этой статье я покажу вам подробные шаги по парсингу скринера TradingView на Python.
Настройка окружения
Прежде чем мы приступим к коду, убедитесь, что у вас установлены следующие предварительные требования на вашем компьютере:
- Python 3.x (Я использую операционную систему Windows и Python 3.9.12)
- Модуль
requests
: для отправки HTTP-запросов и получения ответов - Модуль
pandas
: для манипулирования и анализа данных
Изучение скринера TradingView
Сначала давайте изучим скринер TradingView, чтобы увидеть, какие данные мы можем извлечь. Перейдите на страницу скринера и выберите биржу и рынок. Вы должны увидеть таблицу со списком акций и набором критериев фильтрации на левой стороне.
Теперь давайте откроем инструменты разработчика в вашем браузере и перейдем на вкладку "Сеть". Перезагрузите страницу, и вы должны увидеть список запросов и ответов. Вы должны искать имя "scan", которое содержит данные, которые мы хотим в его ответе, и это должен быть POST-запрос на https://scanner.tradingview.com/
. Нажмите на него и проверьте данные запроса, которые должны выглядеть примерно так:
{
"filter": [
{"left": "exchange", "operation": "in_range", "right": ["NASDAQ", "NYSE"]},
{"left": "sector", "operation": "in_range", "right": ["Finance", "Technology Services"]},
{"left": "market_cap_basic", "operation": "egreater", "right": 2000000000},
{"left": "average_volume_10d_calc", "operation": "egreater", "right": 500000},
{"left": "average_volume_30d_calc", "operation": "egreater", "right": 100000},
{"left": "change", "operation": "greater", "right": 0},
{"left": "is_primary", "operation": "equal", "right": true},
{"left": "active_symbol", "operation": "equal", "right": true}
],
"options": {
"active_symbols_only": true,
"lang": "en"
},
"symbols": {
"query": {
"types": []
}
},
"columns": [
"name", "close", "change", "change_abs", "Recommend.All", "volume",
"Value.Traded", "market_cap_basic", "price_earnings_ttm",
"earnings_per_share_basic_ttm", "number_of_employees", "sector", "currency"
],
}
Этот запрос содержит критерии фильтрации, которые мы выбрали, такие как биржа и сектор, а также соответствующие данные для отчета (под "columns"). Нам нужно будет создать аналогичный запрос в нашем коде Python для отправки POST-запроса на сервер TradingView.
Парсинг TradingView скринера
Теперь давайте напишем некоторый код на Python для парсинга TradingView скринера. Сначала импортируем необходимые модули:
import requests
import pandas as pd
Затем мы создадим параметры запроса на основе наших критериев фильтрации. Например, если мы хотим отфильтровать акции, которые удовлетворяют следующим условиям:
и позволить программе предоставить информацию о акциях, включая цену закрытия, объем и объем торгов, рыночную капитализацию, прибыль на акцию и т.д., мы можем определить параметры запроса следующим образом:
# Определение параметров поиска
payload = {
"filter": [
{"left": "exchange", "operation": "in_range", "right": ["NYSE", "NASDAQ"]},
{"left": "sector", "operation": "in_range", "right": ["Финансы", "Технологические услуги"]}
],
"options": {"lang": "ru"},
"symbols": {"query": {"types": []}, "tickers": []},
"columns": ["name", "close", "change", "volume", "Value.Traded",
"market_cap_basic", "price_earnings_ttm",
"earnings_per_share_basic_ttm", "sector", "description"],
"sort": {"sortBy": "market_cap_basic", "sortOrder": "desc"},
}
Не стесняйтесь изменять числа и добавлять/удалять нужные поля.
Отправка POST-запроса
Затем мы отправим POST-запрос к конечной точке API с нашими параметрами, используя модуль requests. При необходимости вы также можете добавить некоторые заголовки, чтобы имитировать веб-браузер, включая строку User-Agent и URL реферера.
# Отправка POST-запроса с заголовками и параметрами
url = 'https://scanner.tradingview.com/global/scan'
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
# 'Referer': 'https://www.tradingview.com/screener/'
#}
response = requests.post(url, headers=headers, json=params)
Мы используем формат JSON для наших параметров, передавая их в качестве аргумента json функции post().
Парсинг JSON-ответа
Теперь, когда мы отправили запрос и получили ответ, мы можем начать разбирать JSON-данные, чтобы извлечь необходимую информацию.
if response.status_code == 200:
info_dict = json.loads(response.text)
total_count = info_dict["totalCount"]
stock_data = info_dict["data"]
for stock in stock_data:
stock_fullname = stock['s']
stock_info = stock['d']
info_dict[“totalCount”]
дает количество отфильтрованных символов, а словарь stock_data
выглядит следующим образом, с ключом 's' для полного названия акции и ключом 'd' для списка информации, указанной в поле columns
в payload
для URL POST-запросов.
Теперь у вас есть подробная информация о каждом отфильтрованном символе для дальнейшей обработки.
Заключение
В этом руководстве мы научились парсить скринер TradingView с помощью Python и библиотеки requests
, включая создание POST-запроса к API скринера, разбор HTML-ответа с помощью json
.
Парсинг данных с веб-сайтов может быть мощным инструментом для анализа данных и исследований. Однако также важно уважать условия использования веб-сайтов и использовать парсинг ответственно.
Получите неограниченный доступ на https://medium.com/@coucoucamille/membership