如何使用Python从Finviz股票数据表格中提取指定单元格数值
实现方案
你抓取到的Finviz快照表采用「左列指标、右列数值」的行内多组结构,只要把所有指标和对应值提取为键值对字典,就能直接按指标名称快速获取对应数值。
修改后完整代码
#---------- 模拟浏览器请求头 ----------# headers = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36", "X-Requested-With": "XMLHttpRequest" } #---------- 导入依赖模块 ----------# import pandas as pd import requests #---------- 输入股票代码 ----------# ticker = input("请输入股票代码: ") print(f"正在加载 {ticker.upper()} 的数据...") #---------- 抓取目标股票数据 ----------# url = f'https://finviz.com/quote.ashx?t={ticker.upper()}' req = requests.get(url, headers=headers) table = pd.read_html(req.text, attrs = {"class":"snapshot-table2"} ) df = table[0] #---------- 转换为指标字典方便查询 ----------# finviz_data = {} for _, row in df.iterrows(): # 按步长2遍历列,每次取一组「指标-数值」 for col_idx in range(0, len(row), 2): indicator = row[col_idx] value = row[col_idx + 1] finviz_data[indicator] = value #---------- 提取指定指标示例 ----------# # 提取P/E数值 pe = finviz_data['P/E'] print(f"当前P/E比率: {pe}") # 提取带百分号的股息率并转为可计算的浮点型 dividend_pct = float(finviz_data['Dividend %'].replace('%', '')) print(f"股息率: {dividend_pct}%")
常用取值示例
你可以直接通过指标名获取任意数值,常见用法如下:
- 获取滚动每股收益:
finviz_data['EPS (ttm)'] - 获取远期市盈率:
finviz_data['Forward P/E'] - 获取总市值:
finviz_data['Market Cap'] - 获取季度营收同比增速:
finviz_data['Sales Q/Q']
如果需要把提取到的字符串转为可计算的数值,只需要做对应格式处理即可:
- 带百分号的数值:用
replace('%', '')去掉百分号后转float - 带B/M(十亿/百万)单位的数值:替换单位后乘以对应量级即可
内容的提问来源于stack exchange,提问作者squarehammer89
相关产品推荐
相关产品推荐

