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