Python 爬虫 | 爬取股票概念数据
這段時間寫了行業板塊、漲跌停板數據,獲取這些數據的目的就是想通過處理、分析這些數據把整個大盤的情況反饋給我,讓我可以用最少的時間進行復盤(說白了就是懶得看,果然懶才是程序員的第一生產力)。這幾天把這些數據給我一個大佬朋友進行分析,建議我增加多一個概念數據(讓我又可以水一篇)。
目標網站:
aHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2JvYXJkbGlzdC5odG1sI2NvbmNlcHRfYm9hcmQ=
難度:?
環境配置:
requests、pandas
目標數據:
圖1圖2我需要獲取概念、當日概念的領漲個股以及該概念下的股票。
目錄:
1、分析請求
2、代碼實現
1、分析請求
其實這些數據獲取難度不高,掌握了爬蟲基本功很快就能解決,剩下的就是存儲數據。
打開開發者工具刷新請求后Ctrl+F查找關鍵詞就能很快定位數據所在的請求。
圖1-1觀察一下url,根據這幾次的爬取我知道url中大概率是有個參數控制一次返回的數據量的。我是觀察哪個參數的數值是20,因為這個網站一頁展示的數據量通常是20條。
http://4.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112401376425269199828_1656493760246&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:90+t:3+f:!50&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222&_=1656493760247
通過觀察和測試很快就可以知道pz是控制返回數據量的關鍵參數。
再看看概念下所屬的個股
圖1-2觀察一下url
https://push2.eastmoney.com/api/qt/clist/get?cb=jQuery11230057446023640657096_1656493440885&fid=f62&po=1&pz=50&pn=1&np=1&fltt=2&invt=2&ut=b2884a393a59ad64002292a3e90d46a5&fs=b%3ABK1080&fields=f12%2Cf14%2Cf2%2Cf3%2Cf62%2Cf184%2Cf66%2Cf69%2Cf72%2Cf75%2Cf78%2Cf81%2Cf84%2Cf87%2Cf204%2Cf205%2Cf124%2Cf1%2Cf13
發現很多%2C,這只是url編碼而已,網上隨便找一個url在線解碼即可。
解完碼:
https://push2.eastmoney.com/api/qt/clist/get?cb=jQuery11230057446023640657096_1656493440885&fid=f62&po=1&pz=50&pn=1&np=1&fltt=2&invt=2&ut=b2884a393a59ad64002292a3e90d46a5&fs=b:BK1080&fields=f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124,f1,f13
觀察是哪個參數解決了返回的是哪個概念數據,很快就可以找到fs這個參數中有BK1080,這個是概念的指數代碼。那想要大量獲取概念數據就需要解決每個概念對應的指數代碼是什么。觀察圖1-1中就可以很快找到概念對應的指數代碼。
2、代碼實現
實現思路:
一、獲取概念進入數據以及對應的指數代碼
二、依據一中得到的指數代碼構造url拿到概念下所屬的個股
三、獲取個股的地區板塊數據(告訴你們個好玩的)
代碼我就不解釋了吧?看不懂的該好好學學基礎了。
一、獲取概念數據
concept_url = "http://94.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112404219515748621301_1656315378776&pn=1&" \"pz=500&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&" \"fs=m:90+t:3+f:!50&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24," \"f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,f140,f141,f207,f208,f209,f222&_=" \f"{int(time.time() * 1000)}"date = get_standard_date(timestamp=time.time())response = requests.request("GET", concept_url, headers=headers) concept_index_list = [] concept_name, up_down, representative = [], [], [] for i in jquery_list(jquery=response.text, data_mode='{')['data']['diff']:if i['f14'] in ('昨日連板_含一字', '昨日連板', '昨日漲停_含一字', '昨日漲停', '昨日跌停', '昨日觸板', '創業板綜', 'B股', '上證180_', 'AH股'):continueconcept_index_list.append((i['f12'], i['f14']))concept_name.append(i['f14'])up_down.append(i['f3'])representative.append(i['f128']) concept_data = {'概念名稱': concept_name, '概念漲跌幅': up_down, '領漲個股': representative} save_data(data=concept_data, file_name='概念數據', header=True)二、獲取概念下所屬的個股
step = 1 for i in concept_index_list:# 概念明細concept_detail_url = "https://push2.eastmoney.com/api/qt/clist/get?cb=jQuery112309520971118134538_1656316025491&" \"fid=f62&po=1&pz=500&pn=1&np=1&fltt=2&invt=2&ut=b2884a393a59ad64002292a3e90d46a5&" \f"fs=b:{i[0]}&fields=f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f102,f204,f205," \"f124,f1,f13"result = requests.request("GET", concept_detail_url, headers=headers)stock_code, stock_name = [], []try:for x in jquery_list(jquery=result.text, data_mode='{')['data']['diff']:code_index = judge_index(x['f12'])stock_code.append(code_index)stock_name.append(x['f14'])zone_data.append((code_index, x['f14'], x['f102']))except TypeError:print('該概念有問題!')data = {'概念': [i[1]] * len(stock_code), '代碼': stock_code, '名稱': stock_name}if step == 1:save_data(data=data, file_name='概念數據-所屬個股')else:save_data(data=data, file_name='概念數據-所屬個股', header=False)step += 1time.sleep(0.5)三、獲取地區數據
觀察這些返回的數據你會發現并沒有地區相關的數據,是沒有,但是我們可以讓接口返回地區數據。在上一篇中我就說了這個網站鏈接的參數是很好修改的,只要你知道地區參數是哪個就可以輕松獲取地區數據,地區數據是f102,只需要在鏈接后加上這個參數即可獲取地區數據。
數據獲取到這一步也算收集的差不多了,之后可以依據這些數據先初步搭建一個分析框架(又挖坑)。
總結
以上是生活随笔為你收集整理的Python 爬虫 | 爬取股票概念数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struct模块使用
- 下一篇: python截取视频_python使用f