Python爬蟲(chóng)獲取基金列表
1 前言
python爬蟲(chóng)用來(lái)收集數(shù)據(jù)是最直接和常用的方法,可以使用python爬蟲(chóng)程序獲得大量的數(shù)據(jù),從而變得非常的簡(jiǎn)單和快速;絕大多數(shù)網(wǎng)站使用了模板開(kāi)發(fā),使用的模板可以快速生成大量相同布局不同內(nèi)容的頁(yè)面,這時(shí)只需要為一個(gè)頁(yè)面開(kāi)發(fā)爬蟲(chóng)程序,因?yàn)榕老x(chóng)程序也可以對(duì)同一模板生成的不同內(nèi)容進(jìn)行爬取內(nèi)容
2 哪里去獲取數(shù)據(jù)呢
這里給大家準(zhǔn)備好了,打開(kāi)這個(gè)連接,就能找看到對(duì)應(yīng)的基金信息:
http://fund.eastmoney.com/jzzzl.html
有了基金連接,我們要做的就是怎么把它抓取下來(lái),123 開(kāi)始,我恰巧發(fā)現(xiàn)了后臺(tái)訪問(wèn)的接口,是不是很神奇,該是上圖的時(shí)候了,大家可以看到如下圖:
# 這是原始的連接 http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx?lx=1&sort=zdf,desc&page=2,200&onlySale=0 # 經(jīng)過(guò)我使用postman 刪減掉一些參數(shù)發(fā)現(xiàn)精簡(jiǎn)的連接如下,我不能不吐槽一下,這個(gè)時(shí)候了還有參數(shù)傳遞使用中文首字母拼寫(xiě)的, # lx分明就是類型的簡(jiǎn)寫(xiě)。sort 是對(duì)某些字段排序可以忽略。分頁(yè)的話2,200就是第二頁(yè),每頁(yè)200條,onlySale就是可以賣出的條件。 http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx?lx=1&sort=zdf,desc&page=2,100&onlySale=0
3 怎么抓取數(shù)據(jù)呢
這里我們使用python,需要安裝的類庫(kù)有 requests/demjson/prettytable/json,有沒(méi)有特別簡(jiǎn)單呢?
# 安裝命令如下 # 發(fā)起請(qǐng)求 pip install requests # 將不是那么嚴(yán)格的json 格式轉(zhuǎn)換為json pip install demjson # 格式化打印數(shù)據(jù) pip install prettytable # 將json 格式化的文本轉(zhuǎn)換為json pip install json
這里我可以上代碼了,簡(jiǎn)單的邏輯就是先抓取api接口返回的信息,然后解析報(bào)文,將返回結(jié)果轉(zhuǎn)換成json 格式后只選擇需要獲取的內(nèi)容,最后將獲取的結(jié)果進(jìn)行輸出即可。
import requests import json import demjson from prettytable import PrettyTable # 數(shù)據(jù)表格的列表表頭字段 title_list = ["code", "name", "value"] # 查詢基金列表信息 def query_fund_list(page= 1): req_url = "http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx?lx=1&sort=zdf,desc&page={},20&onlySale=0".format(page) response = requests.get(req_url) # 輸出響應(yīng)頭 # print(response.headers) # 獲取請(qǐng)求結(jié)果并替換,否則結(jié)果不能進(jìn)行格式化json resp_body = response.text.replace("var db=", "") # 本來(lái)首選是這個(gè)json, 因?yàn)閖son 不支持 {a :"1"} 這樣的轉(zhuǎn)換,因此使用了 demojson # json_data = json.loads(resp_body) # 轉(zhuǎn)換對(duì)象為 json 對(duì)象,使不規(guī)則的json格式化為json對(duì)象 resp_body = demjson.decode(resp_body) # 獲取結(jié)果數(shù)組 fund_list = resp_body["datas"] body_list = [] for node in fund_list: tmp = [] tmp.append(node[0]) tmp.append(node[1]) tmp.append(node[3]) body_list.append(tmp) # 創(chuàng)建一個(gè)對(duì)象 PrettyTable 用于打印輸出結(jié)果 bt = PrettyTable() # 將表頭信息信息放入bt 中 bt.field_names = title_list # 將表格內(nèi)容放置在 bt 中 bt.add_rows(body_list) # 打印結(jié)果 print(bt) if __name__ == "__main__": # 這里只打印了第一頁(yè),循環(huán)打印結(jié)果就不寫(xiě)了,大家都會(huì)的 query_fund_list(1)
最終輸出的結(jié)果如圖所示 :
最終我們達(dá)到的結(jié)果就是這樣的結(jié)果,有了這些結(jié)果,我們可以進(jìn)行結(jié)構(gòu)化存儲(chǔ),放進(jìn)數(shù)據(jù)庫(kù)中方面查詢和使用。
基金代碼 | 基金名稱 | 最新凈值 |
---|---|---|
005585 | 銀河文體娛樂(lè)混合 | 1.6363 |
001907 | 國(guó)投瑞銀境煊靈活配置混合A | 3.3055 |
001908 | 國(guó)投瑞銀境煊靈活配置混合C | 3.1667 |
164818 | 工銀中證傳媒指數(shù)(LOF)A | 0.9231 |
... | ... | ... |
這是一個(gè)簡(jiǎn)單的開(kāi)始,我們獲取到了基金的列表。后續(xù)我們會(huì)抓取基金的基本信息和變動(dòng)信息,建立模型去展現(xiàn)。
到此這篇關(guān)于Python爬蟲(chóng)獲取基金列表的文章就介紹到這了,更多相關(guān)Python獲取列表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python OpenCV 直方圖的計(jì)算與顯示的方法示例
這篇文章主要介紹了Python OpenCV 直方圖的計(jì)算與顯示的方法示例,主要介紹用NumPy和Matplotlib計(jì)算和繪制直方圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02python圖形開(kāi)發(fā)GUI庫(kù)pyqt5的基本使用方法詳解
這篇文章主要介紹了python圖形開(kāi)發(fā)GUI庫(kù)pyqt5的基本使用方法詳解,需要的朋友可以參考下2020-02-02一文深入了解Python中的繼承知識(shí)點(diǎn)
Python?是面向?qū)ο蟮木幊陶Z(yǔ)言,因此支持面向?qū)ο蟮娜筇匦灾唬豪^承。本文就帶大家了解了解Python中繼承的相關(guān)知識(shí)點(diǎn),感興趣的可以了解一下2022-11-11python面向?qū)ο髮?shí)現(xiàn)名片管理系統(tǒng)文件版
這篇文章主要為大家詳細(xì)介紹了python面向?qū)ο髮?shí)現(xiàn)名片管理系統(tǒng)文件版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04PyTorch中model.zero_grad()和optimizer.zero_grad()用法
這篇文章主要介紹了PyTorch中model.zero_grad()和optimizer.zero_grad()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06