Python 爬虫 | 爬取股票概念数据
這段時(shí)間寫(xiě)了行業(yè)板塊、漲跌停板數(shù)據(jù),獲取這些數(shù)據(jù)的目的就是想通過(guò)處理、分析這些數(shù)據(jù)把整個(gè)大盤(pán)的情況反饋給我,讓我可以用最少的時(shí)間進(jìn)行復(fù)盤(pán)(說(shuō)白了就是懶得看,果然懶才是程序員的第一生產(chǎn)力)。這幾天把這些數(shù)據(jù)給我一個(gè)大佬朋友進(jìn)行分析,建議我增加多一個(gè)概念數(shù)據(jù)(讓我又可以水一篇)。
目標(biāo)網(wǎng)站:
aHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2JvYXJkbGlzdC5odG1sI2NvbmNlcHRfYm9hcmQ=
難度:?
環(huán)境配置:
requests、pandas
目標(biāo)數(shù)據(jù):
圖1圖2我需要獲取概念、當(dāng)日概念的領(lǐng)漲個(gè)股以及該概念下的股票。
目錄:
1、分析請(qǐng)求
2、代碼實(shí)現(xiàn)
1、分析請(qǐng)求
其實(shí)這些數(shù)據(jù)獲取難度不高,掌握了爬蟲(chóng)基本功很快就能解決,剩下的就是存儲(chǔ)數(shù)據(jù)。
打開(kāi)開(kāi)發(fā)者工具刷新請(qǐng)求后Ctrl+F查找關(guān)鍵詞就能很快定位數(shù)據(jù)所在的請(qǐng)求。
圖1-1觀察一下url,根據(jù)這幾次的爬取我知道url中大概率是有個(gè)參數(shù)控制一次返回的數(shù)據(jù)量的。我是觀察哪個(gè)參數(shù)的數(shù)值是20,因?yàn)檫@個(gè)網(wǎng)站一頁(yè)展示的數(shù)據(jù)量通常是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
通過(guò)觀察和測(cè)試很快就可以知道pz是控制返回?cái)?shù)據(jù)量的關(guān)鍵參數(shù)。
再看看概念下所屬的個(gè)股
圖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
發(fā)現(xiàn)很多%2C,這只是url編碼而已,網(wǎng)上隨便找一個(gè)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
觀察是哪個(gè)參數(shù)解決了返回的是哪個(gè)概念數(shù)據(jù),很快就可以找到fs這個(gè)參數(shù)中有BK1080,這個(gè)是概念的指數(shù)代碼。那想要大量獲取概念數(shù)據(jù)就需要解決每個(gè)概念對(duì)應(yīng)的指數(shù)代碼是什么。觀察圖1-1中就可以很快找到概念對(duì)應(yīng)的指數(shù)代碼。
2、代碼實(shí)現(xiàn)
實(shí)現(xiàn)思路:
一、獲取概念進(jìn)入數(shù)據(jù)以及對(duì)應(yīng)的指數(shù)代碼
二、依據(jù)一中得到的指數(shù)代碼構(gòu)造url拿到概念下所屬的個(gè)股
三、獲取個(gè)股的地區(qū)板塊數(shù)據(jù)(告訴你們個(gè)好玩的)
代碼我就不解釋了吧?看不懂的該好好學(xué)學(xué)基礎(chǔ)了。
一、獲取概念數(shù)據(jù)
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 ('昨日連板_含一字', '昨日連板', '昨日漲停_含一字', '昨日漲停', '昨日跌停', '昨日觸板', '創(chuàng)業(yè)板綜', '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, '領(lǐng)漲個(gè)股': representative} save_data(data=concept_data, file_name='概念數(shù)據(jù)', header=True)二、獲取概念下所屬的個(gè)股
step = 1 for i in concept_index_list:# 概念明細(xì)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('該概念有問(wèn)題!')data = {'概念': [i[1]] * len(stock_code), '代碼': stock_code, '名稱': stock_name}if step == 1:save_data(data=data, file_name='概念數(shù)據(jù)-所屬個(gè)股')else:save_data(data=data, file_name='概念數(shù)據(jù)-所屬個(gè)股', header=False)step += 1time.sleep(0.5)三、獲取地區(qū)數(shù)據(jù)
觀察這些返回的數(shù)據(jù)你會(huì)發(fā)現(xiàn)并沒(méi)有地區(qū)相關(guān)的數(shù)據(jù),是沒(méi)有,但是我們可以讓接口返回地區(qū)數(shù)據(jù)。在上一篇中我就說(shuō)了這個(gè)網(wǎng)站鏈接的參數(shù)是很好修改的,只要你知道地區(qū)參數(shù)是哪個(gè)就可以輕松獲取地區(qū)數(shù)據(jù),地區(qū)數(shù)據(jù)是f102,只需要在鏈接后加上這個(gè)參數(shù)即可獲取地區(qū)數(shù)據(jù)。
數(shù)據(jù)獲取到這一步也算收集的差不多了,之后可以依據(jù)這些數(shù)據(jù)先初步搭建一個(gè)分析框架(又挖坑)。
總結(jié)
以上是生活随笔為你收集整理的Python 爬虫 | 爬取股票概念数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: struct模块使用
- 下一篇: python截取视频_python使用f