Я хочу загрузить данные календаря доходов по ссылке 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()
Я заметил, что есть несколько скрытых столбцов, характеризуемых классом 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 Вы можете сделать это с driver.find_element(By.XPATH, "//div[.='This Week']").click()
Как выбрать данные для «Эта неделя»