前言
字節(jié)跳動如果上市,那么鐘老板將成為我國第一個世界首富
趁著現(xiàn)在還沒上市,咱們提前學(xué)習(xí)一下用Python分析股票歷史數(shù)據(jù),抱住粗大腿坐等起飛~
好了話不多說,我們直接開始正文
準備工作
環(huán)境使用
- Python 3.10 解釋器
- Pycharm 編輯器
模塊使用
- requests —> 數(shù)據(jù)請求模塊
- csv -> 保存csv表格
- pandas -> 可以實現(xiàn)保存Excel表格文件
requests
和pandas
是第三方模塊,需要手動安裝,直接pip install 加上模塊名字即可。
案例實現(xiàn)流程
數(shù)據(jù)來源分析
- 明確需求: 明確采集的網(wǎng)站以及數(shù)據(jù)內(nèi)容
- 網(wǎng)址: 雪球網(wǎng)
- 數(shù)據(jù): 股票數(shù)據(jù) - 抓包分析: 分析 股票數(shù)據(jù), 可以請求那個網(wǎng)址能夠得到
- 打開開發(fā)者工具: F12 / 右鍵點擊檢查選擇 network (網(wǎng)絡(luò))
- 點擊第二頁數(shù)據(jù)
數(shù)據(jù)包: https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page=2&size=30&order=desc&order_by=amount&exchange=CN&market=CN&type=sha
請求網(wǎng)址:
請求方式:
請求頭:
代碼實現(xiàn)步驟
- 發(fā)送請求 -> 模擬瀏覽器對于url發(fā)送請求
- 獲取數(shù)據(jù) -> 獲取服務(wù)器返回響應(yīng)數(shù)據(jù) <整個數(shù)據(jù)>
- 解析數(shù)據(jù) -> 提取我們需要數(shù)據(jù)
- 保存數(shù)據(jù) -> 保存表格文件 < csv / Excel > 中
代碼解析
保存表格文件
- csv -> csv模塊
- Excel -> pandas模塊
# 創(chuàng)建文件對象 f = open('股票.csv', mode='w', encoding='utf-8', newline='') # fieldnames 字段名 表頭一行數(shù)據(jù) <前面保存字典的鍵> csv_writer= csv.DictWriter(f, fieldnames=[ '股票代碼', '股票名稱', '當前價', '漲跌額', '漲跌幅', '年初至今', '成交量', '成交額', '換手率', '市盈率(TTM)', '股息率', '市值', ]) # 寫入表頭 csv_writer.writeheader() # 創(chuàng)建一個空列表 content_list = [] # 源碼領(lǐng)取摳裙:815624229
?
?
發(fā)送請求
模擬瀏覽器對于url發(fā)送請求
- 模擬瀏覽器: headers 請求頭
- 從瀏覽器開發(fā)者工具中直接復(fù)制
- 字典數(shù)據(jù)類型, 構(gòu)建完整鍵值對形式
- 請求網(wǎng)址:
從瀏覽器開發(fā)者工具中直接復(fù)制 - 發(fā)送請求:
需要requests模塊 -> pip install requests
<Response [200]> 響應(yīng)對象 表示請求成功
# 模擬瀏覽器 headers = { 'Cookie': 's=av17ye9exq; xq_a_token=cf755d099237875c767cae1769959cee5a1fb37c; xq_r_token=e073320f4256c0234a620b59c446e458455626d9; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwMTk5NTg4MCwiY3RtIjoxNzAwNTYzOTE3MDU2LCJjaWQiOiJkOWQwbjRBWnVwIn0.EbAa9h0fB9H_sH415f3x8r2CQiKmPbXZMnuKCy401scB1lMQKOffws6WTwPD2UzFWnntYxIQYSJpX509VUYYgCQkZ_bYtLbtYd5PfxLhWx7coauYA4d3x5aZolzB3eP5IthaYAb0Kbj3MPK8LVRBhABpRGr4wajISuABFNezroM_-5dpiOYK7Rk0UXtU2Qhrzxi1BVCgFUhPP-oR_vKenBw5tLzSqa6aO7CukgI7JVb-6LiymuBquE8FE-de8Vs3evai0fvtjiqryrH3EWM3nmDQIayigHRrYo595bD32kUPP4swHF5U2fwbLHTntIRAm9LsXn8sVf-6sUdgHoYZGg; cookiesu=931700563933974; u=931700563933974; device_id=5da9e0ae658f9fcd3d89078312131fb7; Hm_lvt_1db88642e346389874251b5a1eded6e3=1700563934; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1700563934', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36' } for page in range(1, 58): print(f'==============正在采集第{page}頁數(shù)據(jù)內(nèi)容==============') # 請求網(wǎng)址 url = f'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page={page}&size=30&order=desc&order_by=amount&exchange=CN&market=CN&type=sha' # 發(fā)送請求 response = requests.get(url=url, headers=headers)
?
獲取數(shù)據(jù)
獲取服務(wù)器返回響應(yīng)數(shù)據(jù) <整個數(shù)據(jù)>
- response.text 獲取響應(yīng)文本數(shù)據(jù) <字符串>
- response.json() 獲取響應(yīng)json數(shù)據(jù) <json數(shù)據(jù) 大部分情況字典數(shù)據(jù)>
- response.content 獲取響應(yīng)二進制數(shù)據(jù) <保存圖片/視頻/音頻/特定格式文件的時候>
解析數(shù)據(jù)
提取我們需要數(shù)據(jù)
解決數(shù)據(jù)方法根據(jù)獲取數(shù)據(jù)來選擇的:
字典取值方法 -> 鍵值對取值 (根據(jù)冒號左邊的內(nèi)容[鍵], 提取冒號右邊的內(nèi)容[值])
json_data = response.json() # 返回json字典數(shù)據(jù) # for循環(huán)遍歷 for index in json_data['data']['list'][1:]: # 提取數(shù)據(jù)保存到字典里面, 方便后續(xù)保存表格文件 dit = { '股票代碼': index['symbol'], '股票名稱': index['name'], '當前價': index['current'], '漲跌額': index['chg'], '漲跌幅': index['percent'], '年初至今': index['current_year_percent'], '成交量': index['volume'], '成交額': index['amount'], '換手率': index['turnover_rate'], '市盈率(TTM)': index['pe_ttm'], '股息率': index['dividend_yield'], '市值': index['market_capital'], } # 保存數(shù)據(jù) csv_writer.writerow(dit) # 把字典添加到空列表里面 content_list.append(dit) print(dit)
?
效果展示
獲取到數(shù)據(jù)保存到表格后
?
采集數(shù)據(jù)和可視化分析部分的代碼我都打包好了,下方源碼中自取。
?
可視化分析
import pandas as pd # 做表格數(shù)據(jù)處理模塊 第三方的 from pyecharts.charts import Bar # 可視化模塊 第三方模塊 from pyecharts import options as opts # 可視化模塊里面的設(shè)置模塊(圖表樣式) # 1. 讀取數(shù)據(jù) # 源碼領(lǐng)取+摳裙 815624229 df = pd.read_csv('股票.csv') x = list(df['股票名稱'].values) y = list(df['成交量'].values) c = ( Bar() .add_xaxis(x[:10]) .add_yaxis("成交額", y[:10]) .set_global_opts( xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), title_opts=opts.TitleOpts(title="Bar-旋轉(zhuǎn)X軸標簽", subtitle="解決標簽名字過長的問題"), ) .render("成交量圖表.html") )
?文章來源:http://www.zghlxwxcb.cn/news/detail-748507.html
好了,今天的分享就到這結(jié)束了,下次見。文章來源地址http://www.zghlxwxcb.cn/news/detail-748507.html
到了這里,關(guān)于簡單的用Python采集股票數(shù)據(jù),保存表格后分析歷史數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!