项目简介
(Python)爬虫 + MySQL + Redis项目.

爬取下来的数据可用于后续的数据分析(我计划将其用于我的毕业设计).

未来会将数据分析的可视化部署到服务器上, 并添加股票降价通知的功能的web接口.

爬虫
执行频率为每天1次, 爬取当天的4192支股票的统计信息. 并存放到数据库中.

并定期导出相应的表用于数据分析.

运行说明
首先要保证本机已经安装MySQL和Redis. 远程连接也可以, 但是需要修改源代码重新Build.

注意, 数据库密码和邮箱授权码已经过脱敏处理, 请务必配置成自己的密码和授权码然后再构建

爬虫部分
采用单线程Python爬虫 + MySQL. 主要文件在./PythonCrawler中

运行文件databaseInitialization.py初始化数据库和相应的表, 数据库连接默认是localhost:3306

运行文件findAllStocksCode.py获得所有4192支股票的股票代码和名称, 这时会得到StockCodes.txt文件

修改insertRecords.py等以"insertRecords"开头的文件中的股票信息路径, 修改为StockCodes.txt文件的绝对路径, crontab定时执行需要绝对路径.

with open(“/home/haiyang/StockCodes.txt”, “r”, encoding=“utf-8”) as f:
开启定时爬虫crontab -e, 如果对每次执行的时间没有限制, 推荐使用单线程爬虫insertRecords.py. 如果对时间有要求, 可以使用进程池, 线程池, 线程池+连接池, 异步IO等方法加速. 但是爬取失败的可能性会增加.

单线程爬虫insertRecords.py的参考时间为406秒

多进程爬虫insertRecordsMultiProcesses.py 的参考时间为150秒

多线程爬虫insertRecordsMultiThread.py的参考时间为146秒

多线程+数据库连接池爬虫insertRecordsMultiThreadConnectionPool.py的参考时间为143秒
程序运行截图:

核心程序代码
databaseInitialization.py

import pymysql
import tracebackdef initializeDatabase():try:cursor = db.cursor()createDatabase = "CREATE DATABASE IF NOT EXISTS stocks"cursor.execute(createDatabase)except Exception as e:traceback.print_exc()def initializeStockTable():try:cursor = db.cursor()cursor.execute("USE stocks")sql = ''' CREATE TABLE IF NOT EXISTS stock(stock_id INT AUTO_INCREMENT,stock_code CHAR(8) NOT NULL,stock_name VARCHAR(20) NOT NULL,PRIMARY KEY(stock_id));'''cursor.execute(sql)cursor.execute("SELECT COUNT(*) FROM stock;")count = cursor.fetchone()if count[0] == 0:with open("./StockCodes.txt", "r", encoding="utf-8") as f:lines = f.readlines()for line in lines:line = line.strip()insert = "INSERT INTO stock(stock_code, stock_name) VALUES('{}','{}')" \.format(line.split(",")[0], line.split(",")[1])cursor.execute(insert)db.commit()else:passexcept Exception as e:traceback.print_exc()# Table Interpret 用来解释record表中各个列的含义, 以及表中的格式和现实的格式
def initializeInterpretTable():cursor = db.cursor()cursor.execute("USE stocks")#sql0 = '''TRUNCATE TABLE Interpret;'''#cursor.execute(sql0);sql = '''CREATE TABLE IF NOT EXISTS Interpret(record_column CHAR(5) NOT NULL,explanation VARCHAR(20) NOT NULL,format_in_record VARCHAR(30) NOT NULL,format_in_reality VARCHAR(30) NOT NULL);'''cursor.execute(sql)sqls = []sqls.append("INSERT INTO Interpret VALUES('f43', '最新', '5471', '54.71')")sqls.append("INSERT INTO Interpret VALUES('f44', '最高', '5817', '58.17')")sqls.append("INSERT INTO Interpret VALUES('f45', '最低', '5118', '51.18')")sqls.append("INSERT INTO Interpret VALUES('f46', '今开', '5140', '51.40')")sqls.append("INSERT INTO Interpret VALUES('f47', '成交量', '836250', '83.62万手')")sqls.append("INSERT INTO Interpret VALUES('f48', '成交额', '4616348672.0', '46.16亿')")sqls.append("INSERT INTO Interpret VALUES('f50', '量比', '265', '2.65')")sqls.append("INSERT INTO Interpret VALUES('f57', '股票代码', '688981', '688981')")sqls.append("INSERT INTO Interpret VALUES('f60', '昨收', '5094', '50.94')")sqls.append("INSERT INTO Interpret VALUES('f168', '换手率', '804', '8.04%')")sqls.append("INSERT INTO Interpret VALUES('f169', '上涨', '647', '6.47')")sqls.append("INSERT INTO Interpret VALUES('f170', '上涨百分比', '1270', '12.70%')")for sql in sqls:cursor.execute(sql)db.commit()def initializeRecordTable():cursor = db.cursor()cursor.execute("USE stocks")sql = '''CREATE TABLE IF NOT EXISTS Record(record_id BIGINT AUTO_INCREMENT,record_time TIMESTAMP NOT NULL,f57 CHAR(8) NOT NULL,f43 INT NOT NULL,f44 INT NOT NULL,f45 INT NOT NULL,f46 INT NOT NULL,f47 BIGINT NOT NULL,f48 DECIMAL(13,1) NOT NULL,f50 SMALLINT NOT NULL,f60 INT NOT NULL,f168 SMALLINT NOT NULL,f169 INT NOT NULL,f170 INT NOT NULL,PRIMARY KEY(record_id));'''cursor.execute(sql)if __name__ == "__main__":connectParams = {"host": "localhost", "port": 3306, "user": "root", "password": "sxing86"}db = pymysql.connect(**connectParams)try:initializeDatabase()initializeStockTable()initializeInterpretTable()initializeRecordTable()except Exception as e:traceback.print_exc()finally:db.close()

完整程序代码下载地址:股票数据爬取并存入mysql完整源代码

Python爬取股票数据存入mysql数据库,获取股票(最新、最高、今开、成交量、成交额、量比、换手率、涨幅等)支持多线程+数据库连接池相关推荐

  1. python爬取新闻存入数据库_python 爬取古诗文存入mysql数据库的方法

    使用正则提取数据,请求库requests,看代码,在存入数据库时,报错ERROR 1054 (42S22): Unknown column 'title' in 'field list'.原来是我写s ...

  2. python爬取微博数据存入数据库_Python爬取微博数据并存入mysql,excel中

    寒假期间做微博数据统计,由于是部门要求,也没办法,自己又是一个懒人,直接用python实现吧.写的很粗糙,也很差,请大家别介意. 总的来说分成两个模块:一个爬取微博数据存入数据库,一个从数据库调取数据 ...

  3. python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中

    因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...

  4. python爬取微博数据存入数据库_python爬取微博并且存入数据库

    由于平时喜欢刷微博,追星,所以写了想要写一个爬取微博的爬虫,在老师的建议下选择从移动端爬取,因为移动端页面元素简洁,易于爬取.在看微博时发现有比移动端更加简单的一个版本....老年机版?就是分页式的. ...

  5. python爬取下拉列表数据_Python+selenium之获取文本值和下拉框选择数据

    Python+selenium之获取文本值和下拉框选择数据 一.结合实例进行描述 1. 实例如下所示: #新增标签操作 def func_labels(self): self.driver.find_ ...

  6. python 爬虫源码 selenium并存储数据库_使用pythonSelenium爬取内容并存储MySQL数据库的实例图解...

    这篇文章主要介绍了python Selenium爬取内容并存储至MySQL数据库的实现代码,需要的朋友可以参考下 前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息.通常,在使用Selenium ...

  7. scrapy爬虫数据存入mysql数据库

    上篇博客使用scrapy框架爬取豆瓣电影top250信息将各种信息通过json存在文件中,不过对数据的进一步使用显然放在数据库中更加方便,这里将数据存入mysql数据库以便以后利用. 运行环境: 1. ...

  8. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)

    Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1) 1.  爬虫设计的技术 1)数据获取,通过http获取网站的数据,如urllib,urllib2,requests等模块: ...

  9. 如何将数据存入mysql_怎样将数据存入mysql数据库

    怎样将数据存入mysql数据库 mip版  关注:231  答案:2  悬赏:80 解决时间 2021-01-18 14:57 已解决 2021-01-17 20:37 怎样将数据存入mysql数据库 ...

最新文章

  1. Android 读取meta-data元素的数据
  2. A - Supercentral Point CodeForces - 165A
  3. 结构体转char[]
  4. 如何自动修复XP/VISTA/WIN7系统引导的工具(NTBootAutofix 2.02)
  5. C# RichTextBox 实现循环查找关键字
  6. mockito_Mockito和Hamcrest的试驾制造商
  7. 安装mariadb、安装Apache
  8. Dubbo学习总结(1)——Dubbo入门基础与实例讲解
  9. 网站源代码遭公开,2.43亿名巴西公民个人数据遭泄露
  10. prism v2之旅(7)
  11. cefsharp 网页打印不好用_WinFrom 的 WebBrowser 替换为 CefSharp
  12. 城市场景车路协同网络需求研究
  13. Java Web目前主流的框架以及正在兴起的框架
  14. 基于机器学习的量化投资策略
  15. 2019牛客暑期多校训练营(第四场)----E- triples II
  16. Win10+Ubunut20.04双系统 双固态 宏基 暗影骑士擎 安装教程(步骤回忆)
  17. 开发外贸客户邮箱,怎么精准开发外贸客户邮箱?
  18. 计算机游戏155,MAME0.155经典1430款游戏合集
  19. windows输入法只有中文导致无法使用一系列快捷键问题
  20. 使用64位任务管理器转储的32位.NET进程dump,WinDbg如何调试

热门文章

  1. linux selinux策略管理与标签
  2. gui设计模式_GUI的完整形式是什么?
  3. 【Rust日报】2022-02-09 热议帖 - 我TM的做开源没有得到任何资助
  4. Docker方式部署Github监控系统Hawkeye
  5. 网页视频播放速度修改器,亲测可用
  6. java课程设计心得体会绪论
  7. 详解C语言最快关键字——register
  8. kali_上传_腾讯云_搭建kali
  9. 7、TM4单片机学习之串口功能
  10. element组件树形控件el-tree点击展开节点,节点重影