大體思路:先爬所有的股票代碼,再通過股票代碼獲取詳細數據
首先進行頁面分析,打開http://quote.eastmoney.com/center/gridlist.html#sh_a_board
按F12找數據來源接口,
發現參數pn爲頁數,則構建request請求,遍歷每一頁,f12爲股票代碼,對返回的數據進行處理
sh_list = request.urlopen(request.Request(
url=url, headers=header_dict)).read().decode(encoding='utf-8')
'''字符串處理獲取股票代碼'''
reg=re.compile(r'(?<=f12":")\d{6}')
all_items = re.findall(reg,sh_list)
return all_items
sz_alllist=[]
for x in range(1,113):
sz_alllist+=get_sz(str(x))
得到上證A股的股票代碼文件
深證同理,不過深證的股票代碼有的是0開頭的,存進去後需要改一下單元格格式填充前面缺失的0
接下來隨便打開一個股票詳情頁面,http://quote.eastmoney.com/sh600778.html
F12抓包發現似乎是之前遇到過的數據綁定,則如果通過request來爬取的話,看不到數據,測試了一下發現數據的位置變成了橫槓-,所以還是繼續找接口來直接爬接口,
找到接口以後發現頁面會一直刷新,服務器會不斷的推送新的數據,有時候久的時候要等幾分鐘才能全部接受完返回,一開始不斷怎麼解決,後面嘗試把接口原本的sse改成get,就解決問題了。而且參數fields就是請求的數據,可以根據自己的需求來請求數據,我這裏就需要
大概這些吧 然後還是老套路,訪問接口接受數據存儲
with request.urlopen(req2) as f:
data_str=f.read().decode('utf-8').split('"data":')[1][:-1] #對返回的數據進行切割切片處理
data_dict=json.loads(data_str) #將字符串轉爲字典對象
這裏因爲返回的數據是字符串,而且剛好是字典類型的,利用json庫的loads方法轉換爲字典,再自己新建一個字典定義數據的鍵
大體就這樣代碼在附件裏,有什麼問題可以留言評論,代碼僅供學習使用,切勿用於其他用途,後果自己承擔