Python爬取股票信息

一. 思路

最近想要自己做個爬取股票信息然後分析的工具。

主要思路是,通過調用東方財富網的接口,獲取所有股票的代碼列表。

然後通過網易財經的股票信息的下載接口獲取股票信息。

數據分析以後再說。

二. 代碼實現

1. 代碼結構如下:

2. clsDir.py(創建目錄)

def mkdir(path):
    # 引入模塊
    import os

    # 去除首位空格
    path = path.strip()
    # 去除尾部 \ 符號
    path = path.rstrip("\\")

    # 判斷路徑是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists(path)

    # 判斷結果
    if not isExists:
        # 如果不存在則創建目錄
        # 創建目錄操作函數
        os.makedirs(path)

        print
        path + ' 創建成功'
        return True
    else:
        # 如果目錄存在則不創建,並提示目錄已存在
        print
        path + ' 目錄已存在'
        return False

3. stockList.py(獲取股票對應代碼)

import requests
from fake_useragent import UserAgent
import re
import csv
import clsDir

def getHtml(url):
    r = requests.get(url, headers={
        'User-Agent': UserAgent().random,
    })
    r.encoding = r.apparent_encoding
    return r.text


stockUrl = 'http://86.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124064028201763104_1562133297741&pn=1&pz=100000&po=0&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f12&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2&fields=f12,f14&_=1562133297790'
PATTERN_STOCK = "},{"
if __name__ == '__main__':
    # 創建目錄
    mkpath = "D:\\Stock"
    # 調用函數
    clsDir.mkdir(mkpath)

    html = getHtml(stockUrl)
    reslist = re.split(PATTERN_STOCK, html.replace("\"", "").replace("}]}});",""))
    # 數據清洗:去掉非個股,個股以6(滬市),0(深市),3(創業板)開頭
    datalist = reslist[:]
    for res in reslist:
        if not res.startswith('f12'):
            datalist.remove(res)
            continue
        res = res.replace("f12:", "").replace("f14:", "")
        if not (str(res[1]).startswith('6') or str(res[1]).startswith('3') or str(res[1]).startswith('0')):
            datalist.remove(res)
    f = open('D:/Stock/stock.csv', 'w+', encoding='utf-8', newline="")
    writer = csv.writer(f)
    writer.writerow(('名稱', '代碼'))
    for data in datalist:
        stock = data.replace("f12:", "").replace("f14:", "").split(",")
        writer.writerow((stock[1].replace("*",""), stock[0]))
    f.close()

4.stockInfo.py(通過股票代碼,下載股票信息)

import csv
import urllib.request as r
import threading
import clsDir

# 讀取之前獲取的個股csv丟入到一個列表中
def getStockList():
    stockList = []
    f = open('D:/Stock/stock.csv', 'r', encoding='utf-8')
    f.seek(0)
    reader = csv.reader(f)

    for item in reader:
        stockList.append(item)
    f.close()
    return stockList


def downloadFile(url, filepath):
    try:
        r.urlretrieve(url, filepath)
    except Exception as e:
        print(e)
    print(filepath, "is downloaded")
    pass


# 設置信號量,控制線程併發數
sem = threading.Semaphore(100)


def downloadFileSem(url, filepath):
    with sem:
        downloadFile(url, filepath)


urlStart = 'http://quotes.money.163.com/service/chddata.html?code='
urlEnd = '&end=20190701&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER;VATURNOVER'

if __name__ == '__main__':
    # 創建目錄
    mkpath = "D:\\Stock\\StocksInfo"
    # 調用函數
    clsDir.mkdir(mkpath)

    stockList = getStockList()
    stockList.pop(0)
    for s in stockList:
        scode = str(s[1])
        # 0:滬市;1:深市
        url = urlStart + ("0" if scode.startswith('6') else "1") + scode + urlEnd
        filepath = 'D:/Stock/StocksInfo/' + (scode + '_' + str(s[0])) + '.csv'
        threading.Thread(target=downloadFileSem, args=(url, filepath)).start()

三. 測試執行

1. 生成EXE

1.1. 安裝pyinstaller

執行:

pip install pyinstaller

1.2. 打包生成exe

基本語法:
pyinstaller options myscript.py
常用的可選參數如下:
--onefile 將結果打包成一個可執行文件
--onedir 將所有結果打包到一個文件夾中,該文件夾包括一個可執行文件和可執行文件執行時需要的依賴文件(默認)
--paths=DIR 設置導入路徑
--distpath=DIR 設置將打包的結果文件放置的路徑
--specpath=DIR 設置將spec文件放置的路徑
--windowed 使用windows子系統執行,不會打開命令行(只對windows有效)
--nowindowed 使用控制檯子系統執行(默認)(只對windows有效)
--icon=<FILE.ICO> 將file.ico添加爲可執行文件的資源(只對windows有效)

如pyinstaller --paths="D:\Queena" guess_exe.py

將stockList和stockInfo分別打包:

(venv) D:\workspace-python\stock\sun>pyinstaller -F stockList.py
(venv) D:\workspace-python\stock\sun>pyinstaller -F stockInfo.py

 

2. 執行後的結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章