如何从TradingView爬取印美本周经济日历数据并加载至DataFrame
爬取TradingView印度区经济日历数据并加载到DataFrame
依赖准备
先安装所需的Python工具库:
pip install requests beautifulsoup4 pandas python-dateutil
实现代码
以下代码可完成指定条件的数据爬取,并将结果转换为DataFrame:
import requests from bs4 import BeautifulSoup import pandas as pd from datetime import datetime, timedelta from dateutil.parser import parse # 配置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } # 计算本周的时间范围(周一至周日) today = datetime.today() start_of_week = today - timedelta(days=today.weekday()) end_of_week = start_of_week + timedelta(days=6) # 请求目标页面 url = "https://in.tradingview.com/economic-calendar/" response = requests.get(url, headers=headers) response.raise_for_status() # 捕获请求异常 # 解析页面内容 soup = BeautifulSoup(response.text, 'html.parser') calendar_table = soup.find('table', class_='table-Ng65_0er') # 提取表格表头 table_headers = [th.get_text(strip=True) for th in calendar_table.find('thead').find_all('th')] # 遍历表格行,筛选符合条件的数据 filtered_rows = [] for row in calendar_table.find('tbody').find_all('tr'): cols = row.find_all('td') if len(cols) < len(table_headers): continue # 提取地区标识和事件日期 region = cols[1].get_text(strip=True) event_date_str = cols[0].get_text(strip=True).split('\n')[0] try: event_date = parse(event_date_str).date() except: continue # 应用筛选规则:仅保留印度(IN)/美国(US)、本周内的事件 if region in ['IN', 'US'] and start_of_week.date() <= event_date <= end_of_week.date(): row_content = [col.get_text(strip=True) for col in cols] filtered_rows.append(row_content) # 转换为DataFrame result_df = pd.DataFrame(filtered_rows, columns=table_headers) print(result_df.head())
注意事项
- 反爬限制:TradingView有反爬机制,频繁请求可能被封IP,建议添加请求间隔(如
time.sleep(2))。 - 动态加载问题:如果静态解析拿不到完整数据,说明页面是动态渲染的,需改用
selenium模拟浏览器加载后再解析。 - 页面结构变更:网站可能调整HTML元素的类名或结构,若代码失效,需重新检查页面元素的定位标识。
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

