如何从TradingView印度股市收益页加载本周数据至DataFrame
抓取TradingView印度股市本周收益数据并导入Pandas DataFrame
针对无法选中TradingView收益日历中「This Week」标签的问题,以下是基于Selenium和Pandas的完整解决方案,可准确定位标签并提取本周数据至DataFrame:
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) # 初始化Chrome浏览器并打开目标页面 driver = webdriver.Chrome() driver.get("https://in.tradingview.com/markets/stocks-india/earnings/") # 定位并点击「This Week」标签 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属性值 data_field = [c.get_attribute('data-field') for c in visible_columns] # 提取表头文本(处理换行,只取第一行) header = [c.text.split('\n')[0] for c in visible_columns] # 遍历每个字段,提取对应列的所有数据 columns = [] for field in data_field: column_elements = driver.find_elements(By.XPATH, f"//div[@class='tv-screener__content-pane']//tbody/tr/td[@data-field-key='{field}']") # 处理单元格内的换行,替换为短横线 column_data = [col.text.replace('\n',' - ') for col in column_elements] columns.append(column_data) # 构建Pandas DataFrame并打印 df = pd.DataFrame(dict(zip(header, columns))) print(df) # 关闭浏览器 driver.quit()
关键步骤说明:
- 定位「This Week」标签:使用XPATH
//div[.='This Week']精准匹配标签文本,解决无法选中的问题; - 等待页面加载:点击标签后等待5秒,确保本周数据完全渲染;
- 提取可见列:通过CSS选择器排除隐藏列,只获取页面上展示的列;
- 提取列数据:利用每列的
data-field-key属性定位对应单元格,统一处理文本换行; - DataFrame构建:将表头和列数据对应,生成结构化的DataFrame。
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

