• 基于Python爬虫的股票成交量数据抓取分析系统


    目录

    1. 数据获取 2
      1.1. 实验环境搭建 2
      1.2. 抓取数据 2
      1.2.1. 新浪财经 3
      1.2.2. 网易财经 6
      1.2.3. 东方财富 12
      1.2.4. TuShare (挖地兔) 19
      1.2.5. 其他平台 21
      1.3. 数据获取总结 22
      1.3.1. 股票代码抓取的总结 22
      1.3.2. 日线数据抓取总结 22
      1.3.3. 反爬虫策略及解决的总结 23

    2. 数据清洗(数据预处理) 23
      2.1. 无效数据处理 24
      2.2. 缺失数据处理 25

    3. 数据分析 27
      3.1. 《胡立阳股票投资100招》 由“价量关系”来为个股打分 (一) 28
      3.1.1. 介绍 28
      3.1.2. 思路分析 28
      3.1.3. 实现 29
      3.1.4. 运行结果 29
      3.1.5. 结果分析 36
      3.2. 《胡立阳股票投资100招》 由“价量关系”来为个股打分 (二) 38
      3.2.1. 思路分析 38
      3.2.2. 实现 38
      3.2.3. 分析结果 38
      3.3. 主力进出 (ZLJC) (一) 41
      3.3.1. 概念 41
      3.3.2. 思路分析 41
      3.3.3. 实现 42
      3.4. 主力进出 (ZLJC) (二) 45
      3.4.1. 前提引入 45
      3.4.2. 主要问题及分析思路 45
      3.4.3. 代码编写 45
      3.4.4. 结果分析 46
      3.5. 综合应用 48
      3.5.1. 数据准备 48
      3.5.2. 实现 48
      3.5.3. 统计结果分析 50

    4. 优化方案 53
      4.1. 爬虫性能优化 53
      4.2. 数据读取效率优化 53
      4.3. 编程模式的优化 54

    5. 总结 54

    6. 数据获取
      1.1. 实验环境搭建
      系统及使用的语言:
      Windows 10 专业版 1903 操作系统版本: 18362.356
      Python 3.7.3 64-bit
      需要额外安装的库:
      virtualenv-16.6.0: pip install virtualenv
      requests-2.22.0: pip install requests
      所依赖的模块:URLlib3 在安装 requests 时会自动安装尝试切换页面, 查看地址栏 URL 的变化
      BeautifulSoup4-4.8., 未发生改变ip install BeautifulSoup4`
      pandas: pip install pandas
      所依赖的模块:pytz ,numpy, python-dateutil, six, 在安装 requests 时会自动安装
      tqdm-4.36.1: pip install tqdm
      1.2. 抓取数据
      数据的抓取是构建数据仓库的第一步,首先需要确定数据来源,这个过程通常需要比较各个数据平台,考核数据平台的数据与研究需求的符合程度;具体表现在以下方面:
      数据的可靠性
      指数据来源是否可靠,有无数据敏感等潜在问题
      数据的完整性
      指与需求所需的数据相比是否有所缺失
      数据是否齐全
      获取的难易度
      抓取过程的实现难度
      在本选题中,对数据的需求主要是成交量, 而成交量又分为分时数据(单位时间为一交易日中的若干分钟)和分日数据(单位时间为一个交易日),分时数据的数据量较为庞大,在这里,主要还是针对分日数据进行研究,由于股市的特殊性, 单一的成交量很难制定出可能有效的策略,所以在研究过程中,依旧需要其他的数据作为辅助,综上所述, 在数据抓取阶段,主要需要抓取的数据是:
      股票代码列表
      日线数据
      本文转载自http://www.biyezuopin.vip/onews.asp?id=15692

    import sys
    import json
    import pandas as pd
    
    class Unity(object):
    
        def __init__(self):
            const_path = sys.path[0].replace("\\analyze_data", "")
            f = open(const_path + "\\const.json", "r", encoding="utf8")
            self.consts = json.loads(f.read())
    
        def do(self):
            f1 = open(sys.path[0] + "\\hly_count_res_max_4_group_by_date.json", "r", encoding="utf-8")
            hly = json.loads(f1.read())
            
            f2 = open(sys.path[0] + "\\zljc\\zljc_day_a.json", "r", encoding="utf-8")
            zljc = json.loads(f2.read())
    
            res = {}
            for code in zljc:
                for a in zljc[code]:
                    for day in zljc[code][a]:
                        for date in zljc[code][a][day]["dates_yes"]:
                            # 筛选 hly 中该日期的股票有没有当前这只
                            if date in hly.keys() and code in hly[date]:
                                if date not in res.keys(): res[date] = []
                                if code not in res[date]: res[date].append(code)
    
            
            f3 = open(sys.path[0] + "\\hly_and_zljc_res.json", "w", encoding="utf-8")
            f3.write(json.dumps(res, ensure_ascii=False))
            f3.close()
            f2.close()
            f1.close()
    
        def verify(self):
            f = open(sys.path[0] + "\\hly_and_zljc_res.json", "r", encoding="utf-8")
            res = json.loads(f.read())
            transform_dic = {}
            for date in res:
                for code in res[date]:
                    if code not in transform_dic:
                        transform_dic[code] = []
                    transform_dic[code].append(date)
            # f3 = open(sys.path[0] + "\\hly_and_zljc_res_transform.json", "w", encoding="utf-8")
            # f3.write(json.dumps(transform_dic, ensure_ascii=False))
            # f3.close()
    
            count = {
                "yes": 0,
                "no": 0
            }
            for code in transform_dic:
                print(code)
                try:
                    df = pd.read_csv("%s%s.csv" %  (self.consts['path']['result']['hly'], code), encoding="gbk")
                except:
                    print("ERROR OPENING %s" % code)
                    continue
                for index, row in df.iterrows():
                    if row['日期'] in transform_dic[code]:
                        if index - 5 > 0:
                            if df.loc[index-5, "收盘价"] > row["收盘价"]:
                                count["yes"] += 1
                            else:
                                count["no"] += 1
    
            print(count)
    
    if __name__ == "__main__":
        u = Unity()
        # u.do()
        u.verify()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Android Framework基础知识:Zygote启动流程
    TypeScript 学习笔记(四):装饰器与高级编程技巧
    C++ STL & 标准库
    含文档+PPT+源码等]精品springboot的二手车管理系统vue[包运行成功]Java毕业设计SSM项目源码
    【读书笔记】信息架构:超越Web设计-第二章
    Springboot 对于数据库字段加密方案(此方案是对字符串处理的方案)
    基于CNN的图片识别
    第一季:6成员变量和局部变量【Java面试题】
    某ke登录密码加密寻找
    开源 SPL 助力 JAVA 处理公共数据文件(txt\csv\json\xml\xls)
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/126660362