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. 执行后的结果:

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值