快過年了,手頭有點緊,但是作為一個男人,身上怎麼能夠沒有大把鈔票呢? 於是我決定用Python來分析一波股票,贏了會所嫩*,輸了下海幹活! 好了,上面是我吹牛逼的,不過確實有小伙伴看了爬股票數據進行分析的教程中過,但是我還是不建議各位去碰這玩意,今天咱們就是純純的分享技術哈~ 準備工作 既然要去賺馬 ...
快過年了,手頭有點緊,但是作為一個男人,身上怎麼能夠沒有大把鈔票呢?
於是我決定用Python來分析一波股票,贏了會所嫩*,輸了下海幹活!
好了,上面是我吹牛逼的,不過確實有小伙伴看了爬股票數據進行分析的教程中過,但是我還是不建議各位去碰這玩意,今天咱們就是純純的分享技術哈~
準備工作
既然要去賺馬內,咱們首先要獲取往期的數據來進行分析,通過往期的規律來對當前進行預測,準不准我不知道,反正比人預測的準,不准也不要噴我,咱們是來交流技術的,不是來炒股的。
我們需要使用這些模塊,通過pip安裝即可。
不會安裝模塊可以看我往期文章:如何安裝python模塊, python模塊安裝失敗的原因以及解決辦法
後續使用的其它的模塊都是Python自帶的,不需要安裝,直接導入使用即可。
requests: 爬蟲數據請求模塊
pyecharts: 數據分析 可視化模塊
pandas: 數據分析 可視化模塊裡面的設置模塊(圖表樣式)
獲取數據部分
爬蟲的基本流程
思路分析
採集什麼數據?怎麼採集?
首先我們找到數據來源,從network當中去找到數據所在的位置,這一步就不詳細講了。
可以看我往期文章:Python爬蟲何如抓包?這三個案例手把手教會你,非常詳細!
代碼實現
我們想要實現通過爬蟲獲取到數據,正常情況下有幾個步驟:
- 發送請求
- 獲取數據
- 解析數據
- 保存數據
接下來我們來看代碼
代碼展示
導入需要使用的模塊
import requests # 數據請求模塊 import csv # 表格模塊
1、發送請求
通過response模塊來訪問需要獲取數據的地址
url = 'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page={page}&size=30&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz' requests.get(url=url)
假設目標網址是你剛認識的妹子家,你能穿的破破爛爛,臟不溜秋的就進去嗎?肯定得打扮一番,把自己偽裝的人模狗樣的才讓你進去對不對,不然就被趕出來了。
同理,直接這麼進去是不一定能獲取到數據,所以需要使用 cookie 來偽裝一下,cookie代表著用戶身份信息。
當然光cookie是不夠的,咱們再加上當前網頁的 user-agent
偽裝加好之後,咱們就能得到一個相應結果,先列印出來看看。
import requests # 第三方模塊 import csv # 我錄製了詳細講解的視頻,以及源代碼都在這個君羊708525271自取就好了 # 偽裝 headers = { # 用戶身份信息 'cookie': 's=bq119wflib; device_id=90ec0683f24e4d1dd28a383d87fa03c5; xq_a_token=df4b782b118f7f9cabab6989b39a24cb04685f95; xqat=df4b782b118f7f9cabab6989b39a24cb04685f95; xq_r_token=3ae1ada2a33de0f698daa53fb4e1b61edf335952; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTY3MjE4Njc1MSwiY3RtIjoxNjcwNTAxMjA5MTEyLCJjaWQiOiJkOWQwbjRBWnVwIn0.iuLASkwB6LkAYhG8X8HE-M7AM0n0QUULimW1C4bmkko-wwnPv8YgdakTC1Ju6TPQLjGhMqHuSXqiWdOqVIjy_OMEj9L_HScDot-7kn63uc2lZbEdGnjyF3sDrqGBCpocuxTTwuSFuQoQ1lL7ZWLYOcvz2pRgCw64I0zLZ9LogQU8rNP-a_1Nc91V8moONFqPWD5Lt3JxqcuyJbmb86OpfJZRycnh1Gjnl0Aj1ltGa4sNGSMXoY2iNM8NB56LLIp9dztEwExiRSWlWZifpl9ERTIIpHFBq6L2lSTRKqXKb0V3McmgwQ1X0_MdNdLAZaLZjSIIcQgBU26T8Z4YBZ39dA; u=511670501221348; Hm_lvt_1db88642e346389874251b5a1eded6e3=1667994737,1670480781,1670501222; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1670501922', # 瀏覽器的基本信息 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' } url = 'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page={page}&size=30&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz' # 1. 發送請求 response = requests.get(url=url, headers=headers) print(response)
運行後出現 <Response [200]>求請求成功,出現404就是訪問不到資源,一般是被反爬了。
所以這時候我們需要加一個 referer 防盜鏈參數進去
'referer: https://xueqiu.com/hq'
如果加了還不行,就是自己鏈接有問題了。
取數據的話 .json 就好了
import requests # 第三方模塊 import csv # 偽裝 headers = { # 用戶身份信息 'cookie': 's=bq119wflib; device_id=90ec0683f24e4d1dd28a383d87fa03c5; xq_a_token=df4b782b118f7f9cabab6989b39a24cb04685f95; xqat=df4b782b118f7f9cabab6989b39a24cb04685f95; xq_r_token=3ae1ada2a33de0f698daa53fb4e1b61edf335952; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTY3MjE4Njc1MSwiY3RtIjoxNjcwNTAxMjA5MTEyLCJjaWQiOiJkOWQwbjRBWnVwIn0.iuLASkwB6LkAYhG8X8HE-M7AM0n0QUULimW1C4bmkko-wwnPv8YgdakTC1Ju6TPQLjGhMqHuSXqiWdOqVIjy_OMEj9L_HScDot-7kn63uc2lZbEdGnjyF3sDrqGBCpocuxTTwuSFuQoQ1lL7ZWLYOcvz2pRgCw64I0zLZ9LogQU8rNP-a_1Nc91V8moONFqPWD5Lt3JxqcuyJbmb86OpfJZRycnh1Gjnl0Aj1ltGa4sNGSMXoY2iNM8NB56LLIp9dztEwExiRSWlWZifpl9ERTIIpHFBq6L2lSTRKqXKb0V3McmgwQ1X0_MdNdLAZaLZjSIIcQgBU26T8Z4YBZ39dA; u=511670501221348; Hm_lvt_1db88642e346389874251b5a1eded6e3=1667994737,1670480781,1670501222; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1670501922', # 防盜鏈 'referer: https://xueqiu.com/hq' # 瀏覽器的基本信息 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' } url = 'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page={page}&size=30&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz' # 1. 發送請求 response = requests.get(url=url, headers=headers) print(response.json())
2、獲取數據
什麼是json數據?
以 {}/[] 所包裹起來的數據 {“”:“”, “”:“”}
除了 .json 還可以通過 .text 和 .content 來拿到數據,但是它們獲取到的數據是一樣。
.text 獲取到的是字元串,文本內容。
.content 取到的是二進位數據,一般是圖片/音頻/視頻內容。
json_data = response.json()
3、解析數據
解析數據就是提取數據,把我們想要的數據提取出來。
沒學過字典的小伙伴,可以先學一下字典。
data_list = json_data['data']['list'] # data_list[0] # data_list[1] for i in range(0, len(data_list)): symbol = data_list[i]['symbol'] name = data_list[i]['name'] current = data_list[i]['current'] chg = data_list[i]['chg'] percent = data_list[i]['percent'] current_year_percent = data_list[i]['current_year_percent'] volume = data_list[i]['volume'] amount = data_list[i]['amount'] turnover_rate = data_list[i]['turnover_rate'] pe_ttm = data_list[i]['pe_ttm'] dividend_yield = data_list[i]['dividend_yield'] market_capital = data_list[i]['market_capital'] print(symbol, name, current, chg, percent, current_year_percent, volume, amount, turnover_rate, pe_ttm, dividend_yield, market_capital)
4、保存數據
csv_writer.writerow([symbol, name, current, chg, percent, current_year_percent, volume, amount, turnover_rate, pe_ttm, dividend_yield, market_capital])
爬蟲部分就結束了,接下來看數據分析部分,文章不理解,我還錄了視頻講解,視頻以及完整代碼在文末名片自取即可。
數據可視化分析
導入需要使用的模塊
import pandas as pd # 做表格數據處理模塊 from pyecharts.charts import Bar # 可視化模塊 from pyecharts import options as opts # 可視化模塊裡面的設置模塊(圖表樣式)
讀取數據
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-旋轉X軸標簽", subtitle="解決標簽名字過長的問題"), ) .render("成交量圖表.html")
最後
今天的分享到這裡就結束了,如果如果覺得有幫助的話,記得點贊收藏哈~