excel计算股票技术指标 (Excel计算股票估值)

上面的两篇文章,分别介绍了爬取价值大师价值线的单只股票数据、中证指数成分股数据,这下我们来读取 Excel 表格中的自定义股票代码,然后再来爬取价值大师网的数据。

内容跟前 2 篇文章差不多,只是加入了读取 Excel 表格的自定义函数,具体内容还是参考前 2 篇文章。

excel自动获取股票实时数据,excel计算股票技术指标

代码

import akshare as ak
import requests
import re
from bs4 import BeautifulSoup
import pandas as pd

# 通过代码,获取价值大师的价值线
def get_valuation_ratios(code):
    url = f'https://www.gurufocus.cn/stock/{code}/term/gf_value'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    # 获取大师价值线
    element_jzx = soup.select_one('#term-page-title')
    if element_jzx:
        element_jzx = element_jzx.text.strip()
        element_jzx = re.findall("\d+\.\d+", element_jzx)[0]
    else:
        element_jzx = None
    
    # 获取大师价值估值评价
    element_pj = soup.select_one('#q-app > div > div > main > div:nth-child(3) > div > div.column.term-container.col > div.content-section.q-pa-md.q-mt-sm.q-card.q-card--bordered.q-card--flat.no-shadow > div > div:nth-child(9) > span').text.strip()
    
    # 获取名称
    element_mc = soup.select_one('html body div div main div:nth-child(1) div:nth-child(2) div:nth-child(1) div:nth-child(1) div:nth-child(2) div:nth-child(1) h1 span:nth-child(1)').text.strip()
    
    # 获取现价
    element_xj = soup.select_one('html body div div main div:nth-child(1) div:nth-child(2) div:nth-child(1) div:nth-child(1) div:nth-child(2) div:nth-child(2)')
    element_xj.span.decompose()  # 去掉span标签
    element_xj = re.findall(r'\d+\.\d+', element_xj.text.strip())[0]  # 只保留数字和小数点
    
    # 拼接链接,在代码中加入超链接
    link = f'https://www.gurufocus.cn/stock/{code}/summary'
    
    # 创建一个pandas DataFrame来保存比率
    ratios = pd.DataFrame({
        '代码': [f'=HYPERLINK("{link}", "{code}")'],
        '名称': [element_mc],
        '现价': [element_xj],
        '大师价值': [element_jzx],
        '评价': [element_pj],
    })
    
    # 将“代码”列设置为索引
    ratios = ratios.set_index('代码')
    return ratios

# 通过读取excel中的列“代码”,从而获取价值大师价格
def get_all_valuation_ratios_xslx(file_index_code):
    codes = pd.read_excel(file_index_code, sheet_name=0, engine='openpyxl')['代码'].astype(str).tolist() # 读取csv文件,选择“代码”列,并将其转换为列表。
    all_ratios = pd.DataFrame()
    for code in codes:
        ratios = get_valuation_ratios(code) # 假设有一个名为get_valuation_ratios的函数,返回指定股票的估值比率数据。
        all_ratios = pd.concat([all_ratios, ratios])
    return all_ratios

# 填入导出的名称,自定义股票Excel表格的路径
get_all_valuation_ratios_xslx('测试.xlsx').to_csv(f'excel成分股价值大师.csv', index=True, encoding='utf-8-sig')