摘要:筆記記錄爬取上期所持倉數據的過程,本次爬取使用的工具是python,使用的IDE是pycharm
一、查看網頁屬性,分析數據結構
在瀏覽器中打開上期所網頁,按F12或者選擇表格文字-右鍵-審查元素,調出控制台:
在Network中可以看到目標數據:http://www.shfe.com.cn/data/dailydata/kx/pm20190110.dat,其中20190110是數據代表的日期:
二、將數據下載到本地文件夾
1.在pycharm中新建一個python文檔,將目標dat文件下載到本地文件夾,需要用到的包可以在CMD控制台中通過 ‘pip install [包名]’ 安裝:
1 import xlwt 2 import requests 3 import os 4 mydate = "20190111" #指定需要的數據日期 5 url = "http://www.shfe.com.cn/data/dailydata/kx/pm" + mydate + ".dat" 6 root = "F://py//SQ//" 7 path = root + url.split('/')[-1] + ".txt" #指定下載的目錄,保存為txt文件 8 r = requests.get(url) 9 with open(path, 'wb') as f: 10 f.write(r.content) 11 f.close() 12 print("文件保存成功")
2.運行代碼后,可以看到文件夾中多了個pm20190111.dat.txt文件,用記事本打開文件,可以看到文件是Json格式的表格,接下來用json包將其解析成python的dataframe格式:
代碼:
1 import json 2 file = open("F://py//SQ//pm" + mydate + ".dat.txt", 'r', encoding='UTF-8') 3 js = file.read() 4 dic = json.loads(js) 5 file.close()
3.接下來將數據存儲到excel表中,使用的是xlwt包,運行代碼,至此,上期所的每日持倉數據已成功爬取:
1 def WriteExcel(data): 2 pm = xlwt.Workbook() 3 sheet = pm.add_sheet('Sheet1', cell_overwrite_ok=True) 4 title = ['品種代碼', '序號', '排名', '期貨公司會員號', '會員類別', '總成交量', '比上交易日增減', '期貨公司會員號', '會員類別', '總持買單量', '比上交易日增減', '期貨公司會員號', 5 '會員類別', '總持賣單量', '比上交易日增減', '品種'] 6 for i in range(len(title)): # 創建表頭 7 sheet.write(0, i, title[i]) 8 j = 0 9 for line in data["o_cursor"]: # 寫入數據 10 dataV = list(data["o_cursor"][j].values()) 11 j = j + 1 12 for k in range(len(dataV)): 13 if isinstance(dataV[k], str): 14 dataV[k] = dataV[k].strip() 15 sheet.write(j, k, dataV[k]) 16 pm.save("F://py//SQ//demo" + mydate + ".xls") 17 WriteExcel(dic)