Как загрузить данные календаря доходов по ссылке TradingView и в Dataframe

Я хочу загрузить данные календаря доходов по ссылке TradingView и загрузить их в Dataframe.

Link: https://in.tradingview.com/markets/stocks-india/earnings/
Filter-1: Data for "This Week"

Я не могу выбрать вкладку «На этой неделе». Любая помощь ?

Ответ закрыт, поэтому публикую здесь:

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

import pandas as pd
pd.set_option('display.max_rows', 50000)
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 10000)

driver = webdriver.Chrome()
driver.get("https://in.tradingview.com/markets/stocks-india/earnings/")
driver.find_element(By.XPATH, "//div[.='This Week']").click()
time.sleep(5)

visible_columns = driver.find_elements(By.CSS_SELECTOR, 'div.tv-screener__content-pane thead th:not([class*=i-hidden])')
data_field = [c.get_attribute('data-field') for c in visible_columns]

header = [c.text.split('\n')[0] for c in visible_columns]
rows = driver.find_elements(By.XPATH, "//div[@class='tv-screener__content-pane']//tbody/tr")

columns = []
for field in data_field:
    column = driver.find_elements(By.XPATH, f"//div[@class='tv-screener__content-pane']//tbody/tr/td[@data-field-key='{field}']")
    columns.append([col.text.replace('\n',' - ') for col in column])

df = pd.DataFrame(dict(zip(header, columns)))
print(df)
driver.quit()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я заметил, что есть несколько скрытых столбцов, характеризуемых классом i-hidden. Итак, первым делом мы выбираем только видимые столбцы с помощью селектора css :not([class*=i-hidden]). Затем мы получаем атрибут data-field этих столбцов, чтобы мы могли выбрать соответствующие значения в строках. Примеры значений этого атрибута:

name
market_cap_basic
earnings_per_share_forecast_next_fq
eps_surprise_fq

Далее мы получаем заголовок таблицы и строки. Затем мы перебираем поле данных, чтобы получить все значения ячеек в каждом столбце. Наконец, мы создаем фрейм данных из словаря, имеющего заголовок в качестве ключей и столбцы в качестве значений.

visible_columns = driver.find_elements(By.CSS_SELECTOR, 'div.tv-screener__content-pane thead th:not([class*=i-hidden])')
data_field = [c.get_attribute('data-field') for c in visible_columns]
header = [c.text.split('\n')[0] for c in visible_columns]
rows = driver.find_elements(By.XPATH, "//div[@class='tv-screener__content-pane']//tbody/tr")
columns = []

for field in data_field:
    column = driver.find_elements(By.XPATH, f"//div[@class='tv-screener__content-pane']//tbody/tr/td[@data-field-key='{field}']")
    columns.append([col.text.replace('\n',' - ') for col in column])

pd.DataFrame(dict(zip(header, columns)))

Выход

Как выбрать данные для «Эта неделя»

Rohit 11.02.2023 03:47

@Rohit Вы можете сделать это с driver.find_element(By.XPATH, "//div[.='This Week']").click()

sound wave 13.02.2023 09:06

Другие вопросы по теме