国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 簡(jiǎn)單的股票基金爬蟲

瀏覽:92日期:2022-06-17 13:52:36
目錄項(xiàng)目地址所用到的技術(shù)開(kāi)始編寫爬蟲項(xiàng)目地址

https://github.com/aliyoge/fund_crawler_py

所用到的技術(shù) IP代理池 多線程 爬蟲 sql 開(kāi)始編寫爬蟲

1.首先,開(kāi)始分析天天基金網(wǎng)的一些數(shù)據(jù)。經(jīng)過(guò)抓包分析,可知: ./fundcode_search.js包含所有基金代碼的數(shù)據(jù)。

2.根據(jù)基金代碼,訪問(wèn)地址: fundgz.1234567.com.cn/js/ + 基金代碼 + .js可以獲取基金實(shí)時(shí)凈值和估值信息。

3.根據(jù)基金代碼,訪問(wèn)地址: fundf10.eastmoney.com/FundArchivesDatas.aspx?type=jjcc&code= + 基金代碼 + &topline=10&year=2021&month=3可以獲取第一季度該基金所持倉(cāng)的股票。

4.由于這些地址具有反爬機(jī)制,多次訪問(wèn)將會(huì)失敗的情況。所以需要搭建IP代理池,用于反爬。搭建很簡(jiǎn)單,只需要將proxy_pool這個(gè)項(xiàng)目跑起來(lái)就行了。

# 通過(guò)這個(gè)方法就能獲取代理def get_proxy(): return requests.get('http://127.0.0.1:5010/get/').json()

5.搭建完IP代理池后,我們開(kāi)始著手多線程爬取數(shù)據(jù)的工作。使用多線程,需要考慮到數(shù)據(jù)的讀寫順序問(wèn)題。這里使用python中的隊(duì)列queue存儲(chǔ)基金代碼,不同線程分別從這個(gè)queue中獲取基金代碼,并訪問(wèn)指定基金的數(shù)據(jù)。因?yàn)閝ueue的讀取和寫入是阻塞的,所以可確保該過(guò)程不會(huì)出現(xiàn)讀取重復(fù)和讀取丟失基金代碼的情況。

# 獲取所有基金代碼fund_code_list = get_fund_code()fund_len = len(fund_code_list)# 創(chuàng)建一個(gè)隊(duì)列fund_code_queue = queue.Queue(fund_len)# 寫入基金代碼數(shù)據(jù)到隊(duì)列for i in range(fund_len): # fund_code_list[i]也是list類型,其中該list中的第0個(gè)元素存放基金代碼 fund_code_queue.put(fund_code_list[i][0])

6.現(xiàn)在開(kāi)始編寫獲取所有基金的代碼。

# 獲取所有基金代碼def get_fund_code(): ... # 訪問(wèn)網(wǎng)頁(yè)接口 req = requests.get('http://fund.eastmoney.com/js/fundcode_search.js', timeout=5, headers=header) # 解析出基金代碼存入list中 ... return fund_code_list

7.接下來(lái)是從隊(duì)列中取出基金代碼,同時(shí)獲取基金詳情和基金持倉(cāng)的股票。

# 當(dāng)隊(duì)列不為空時(shí)while not fund_code_queue.empty(): # 從隊(duì)列讀取一個(gè)基金代碼 # 讀取是阻塞操作 fund_code = fund_code_queue.get() ... try:# 使用該基金代碼進(jìn)行基金詳情和股票持倉(cāng)請(qǐng)求...

8.獲取基金詳情

# 使用代理訪問(wèn)req = requests.get( 'http://fundgz.1234567.com.cn/js/' + str(fund_code) + '.js', proxies={'http': 'http://{}'.format(proxy)}, timeout=3, headers=header,)# 解析返回?cái)?shù)據(jù)...

9.獲取持倉(cāng)股票信息

# 獲取股票投資明細(xì)req = requests.get( 'http://fundf10.eastmoney.com/FundArchivesDatas.aspx?type=jjcc&code=' + str(fund_code) + '&topline=10&year=2021&month=3', proxies={'http': 'http://{}'.format(proxy)}, timeout=3, headers=header,)# 解析返回?cái)?shù)據(jù)...

10.準(zhǔn)備一個(gè)數(shù)據(jù)庫(kù),用于存儲(chǔ)數(shù)據(jù)和對(duì)數(shù)據(jù)進(jìn)行篩選分析。這里推薦一個(gè)方便的云數(shù)據(jù)庫(kù),一鍵創(chuàng)建,一鍵查詢,十分方便,而且是免費(fèi)的哦。前往MemFireDB注冊(cè)一個(gè)賬號(hào)就能使用。注冊(cè)邀請(qǐng)碼:6mxJl6、6mYjGY;

python 簡(jiǎn)單的股票基金爬蟲

11.創(chuàng)建好數(shù)據(jù)庫(kù)后,點(diǎn)擊連接信息填入代碼中,用于連接數(shù)據(jù)庫(kù)。

python 簡(jiǎn)單的股票基金爬蟲

# 初始化數(shù)據(jù)庫(kù)連接:engine = create_engine(’postgresql+psycopg2://username:password@ip:5433/dbname’)

12.將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。

with get_session() as s: # create fund ... if (create):s.add(fund) s.commit()

13.到這里,大部分工作已經(jīng)完成了,我們?cè)趍ain函數(shù)中開(kāi)啟線程,開(kāi)始爬取。

# 在一定范圍內(nèi),線程數(shù)越多,速度越快for i in range(50): t = threading.Thread(target=get_fund_data, name='LoopThread' + str(i)) t.start()

14.等到爬蟲運(yùn)行完成之后,我們打開(kāi)MemFireDB,點(diǎn)擊對(duì)應(yīng)數(shù)據(jù)庫(kù)的SQL查詢按鈕,就可以查看我們爬取的數(shù)據(jù)。哇!我們獲取到了6432條數(shù)據(jù)。

python 簡(jiǎn)單的股票基金爬蟲

15.接下來(lái)讓我們來(lái)看看這些基金最喜歡買哪些股票吧。輸入SQL語(yǔ)句select poscode, posname, count(*) as count, cast(sum(poscost) as int) from fund group by poscode, posname order by count desc limit 10;

python 簡(jiǎn)單的股票基金爬蟲

它就是茅臺(tái)!

以上就是python 簡(jiǎn)單的股票基金爬蟲的詳細(xì)內(nèi)容,更多關(guān)于python 股票基金爬蟲的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 织金县| 彩票| 唐河县| 赞皇县| 子长县| 松溪县| 沾益县| 菏泽市| 略阳县| 故城县| 临洮县| 塔城市| 秦皇岛市| 东台市| 深州市| 邯郸县| 于都县| 黔南| 晋城| 封丘县| 子长县| 营口市| 邵武市| 十堰市| 德阳市| 孝昌县| 交城县| 修水县| 黄平县| 东乡县| 伊金霍洛旗| 尼玛县| 荣成市| 富锦市| 周至县| 罗源县| 黔西县| 碌曲县| 磴口县| 河间市| 晋中市|