股票1.0版

【gupiao_main.py】

主函数

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow,QTableWidgetItem
import gupiao
import requests
import time
from bs4 import BeautifulSoupheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36 FS"}
#存放所有数据的列表
list = []
def get_message(text, page):soup = BeautifulSoup(text, 'lxml')if soup.tbody.string !=None:return 0else:for each in soup.tbody.find_all('tr'):th = each.select('th')td = each.select('td')#爬取每一行的数据存入数组listline = [th[0].string, td[0].string, td[1].string, td[2].string, td[3].string, th[1].contents[0].string]list.append(listline)#初始化表格的行和列#不初始化运行的时候会崩掉ui.tableWidget.setColumnCount(6)ui.tableWidget.setRowCount(len(list))line = 0# 遍历每行的元素并写入for i in list:for j in range(6):# print(list[i])ui.tableWidget.setItem(line, j, QTableWidgetItem(i[j]))line+=1def compute(list):arr = []summ = 0.0for i in list:arr.append(i[1])for j in arr:summ += eval(j)  #数组里的每个元素都是str类型了,所以要转为数字类型avg = summ/len(arr)ui.textBrowser.setText(max(arr))ui.textBrowser_2.setText(min(arr))ui.textBrowser_3.setText(str(avg))# print(type(max(arr)))# print(min(arr))# print(avg)def gethtml(gupiao,date,page):url = 'https://market.finance.sina.com.cn/transHis.php?symbol=' + gupiao + '&date=' + date + '&page=' + str(page)print(url)try:r = requests.get(url=url, headers=headers)r.raise_for_status()r.encoding = r.apparent_encodingflag = get_message(r.text, page)if flag == 0:return 0except Exception as result:print("错误原因:", result)return 0def mainexe():# gupiao = input("请输入你想要查询的股票(例如sz000001):")# date = input("请输入你想要查询的日期(格式为2021-04-27):")gupiao= ui.lineEdit.text()date = ui.lineEdit_2.text()for i in range(1, 100):# 返回如果是0则说明爬取错误或者到达尾页,要跳出循环flag = gethtml(gupiao, date, i)# 间隔2s爬取time.sleep(2)if flag == 0:break#计算股票单价平均值最大值最小值compute(list)if __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = gupiao.Ui_Form()ui.setupUi(MainWindow)MainWindow.show()ui.pushButton.clicked.connect(mainexe)sys.exit(app.exec_())

【gupiao.py】

界面函数:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'gupiao.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(629, 426)Form.setMinimumSize(QtCore.QSize(629, 0))self.widget = QtWidgets.QWidget(Form)self.widget.setGeometry(QtCore.QRect(50, 10, 521, 401))self.widget.setObjectName("widget")self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget)self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)self.verticalLayout_2.setObjectName("verticalLayout_2")self.horizontalLayout_3 = QtWidgets.QHBoxLayout()self.horizontalLayout_3.setObjectName("horizontalLayout_3")self.verticalLayout = QtWidgets.QVBoxLayout()self.verticalLayout.setObjectName("verticalLayout")self.horizontalLayout = QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName("horizontalLayout")self.label = QtWidgets.QLabel(self.widget)self.label.setObjectName("label")self.horizontalLayout.addWidget(self.label)self.lineEdit = QtWidgets.QLineEdit(self.widget)self.lineEdit.setObjectName("lineEdit")self.horizontalLayout.addWidget(self.lineEdit)self.verticalLayout.addLayout(self.horizontalLayout)self.horizontalLayout_2 = QtWidgets.QHBoxLayout()self.horizontalLayout_2.setObjectName("horizontalLayout_2")self.label_2 = QtWidgets.QLabel(self.widget)self.label_2.setObjectName("label_2")self.horizontalLayout_2.addWidget(self.label_2)self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)self.lineEdit_2.setObjectName("lineEdit_2")self.horizontalLayout_2.addWidget(self.lineEdit_2)self.verticalLayout.addLayout(self.horizontalLayout_2)self.horizontalLayout_3.addLayout(self.verticalLayout)self.pushButton = QtWidgets.QPushButton(self.widget)self.pushButton.setObjectName("pushButton")self.horizontalLayout_3.addWidget(self.pushButton)self.verticalLayout_2.addLayout(self.horizontalLayout_3)self.tableWidget = QtWidgets.QTableWidget(self.widget)self.tableWidget.setMaximumSize(QtCore.QSize(16777215, 291))self.tableWidget.setObjectName("tableWidget")self.tableWidget.setColumnCount(6)self.tableWidget.setRowCount(0)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(1, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(2, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(3, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(4, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(5, item)self.verticalLayout_2.addWidget(self.tableWidget)self.horizontalLayout_7 = QtWidgets.QHBoxLayout()self.horizontalLayout_7.setObjectName("horizontalLayout_7")self.horizontalLayout_4 = QtWidgets.QHBoxLayout()self.horizontalLayout_4.setObjectName("horizontalLayout_4")self.label_3 = QtWidgets.QLabel(self.widget)self.label_3.setObjectName("label_3")self.horizontalLayout_4.addWidget(self.label_3)self.textBrowser = QtWidgets.QTextBrowser(self.widget)self.textBrowser.setMaximumSize(QtCore.QSize(101, 21))self.textBrowser.setObjectName("textBrowser")self.horizontalLayout_4.addWidget(self.textBrowser)self.horizontalLayout_7.addLayout(self.horizontalLayout_4)self.horizontalLayout_5 = QtWidgets.QHBoxLayout()self.horizontalLayout_5.setObjectName("horizontalLayout_5")self.label_4 = QtWidgets.QLabel(self.widget)self.label_4.setObjectName("label_4")self.horizontalLayout_5.addWidget(self.label_4)self.textBrowser_2 = QtWidgets.QTextBrowser(self.widget)self.textBrowser_2.setMaximumSize(QtCore.QSize(89, 21))self.textBrowser_2.setObjectName("textBrowser_2")self.horizontalLayout_5.addWidget(self.textBrowser_2)self.horizontalLayout_7.addLayout(self.horizontalLayout_5)self.horizontalLayout_6 = QtWidgets.QHBoxLayout()self.horizontalLayout_6.setObjectName("horizontalLayout_6")self.label_5 = QtWidgets.QLabel(self.widget)self.label_5.setObjectName("label_5")self.horizontalLayout_6.addWidget(self.label_5)self.textBrowser_3 = QtWidgets.QTextBrowser(self.widget)self.textBrowser_3.setMaximumSize(QtCore.QSize(99, 21))self.textBrowser_3.setObjectName("textBrowser_3")self.horizontalLayout_6.addWidget(self.textBrowser_3)self.horizontalLayout_7.addLayout(self.horizontalLayout_6)self.verticalLayout_2.addLayout(self.horizontalLayout_7)self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.label.setText(_translate("Form", "股票代码:"))self.label_2.setText(_translate("Form", "日期(2021-04-20):"))self.pushButton.setText(_translate("Form", "查询"))item = self.tableWidget.horizontalHeaderItem(0)item.setText(_translate("Form", "成交时间"))item = self.tableWidget.horizontalHeaderItem(1)item.setText(_translate("Form", "成交价"))item = self.tableWidget.horizontalHeaderItem(2)item.setText(_translate("Form", "价格变动"))item = self.tableWidget.horizontalHeaderItem(3)item.setText(_translate("Form", "成交量(手)"))item = self.tableWidget.horizontalHeaderItem(4)item.setText(_translate("Form", "成交额(元)"))item = self.tableWidget.horizontalHeaderItem(5)item.setText(_translate("Form", "性质"))self.label_3.setText(_translate("Form", "最大值:"))self.label_4.setText(_translate("Form", "最小值:"))self.label_5.setText(_translate("Form", "平均值:"))

【效果图】

【遇到的问题】

  • 与首先是与用户的交互问题。怎样把用户输入和用户点击与界面连接起来。这里可以去看官方文档或者一些博客,每个控件都有自己的一套写入和读出的方法。
  • 代码运行结束窗口自动关闭了。那就是代码有问题了,导致程序崩溃,这时候要检查一下代码是否 真的 有问题。
  • 求平均值窗口崩溃。刚开始求平均值以为存放在数组里面的是数值类型的,但是却是字符类型的,所以不能进行简单的相加,会出错。用eval函数把字符型的转换为数值型的就可以相加了。
  • 这里求min和max比较的是字符的ascll码而不是数值的大小,结果也是对的嘻嘻
  • 还有就是在程序爬取的过程中,窗口会卡死。那是因为点击爬取的代码在主线程中运行,而整个程序就只有一个主线程,所有当在爬取的过程中就不会允许用户做任何的操作,不然会导致窗口崩溃而关闭。解决方法是使用多线程。这里我的代码写的有点乱,不好使用多线程,嘻嘻。
  • 界面没有自使适应。我用了layout布局,但是不知道为什么没用,再看看吧。
    的,所以不能进行简单的相加,会出错。用eval函数把字符型的转换为数值型的就可以相加了。
  • 这里求min和max比较的是字符的ascll码而不是数值的大小,结果也是对的嘻嘻
  • 还有就是在程序爬取的过程中,窗口会卡死。那是因为点击爬取的代码在主线程中运行,而整个程序就只有一个主线程,所有当在爬取的过程中就不会允许用户做任何的操作,不然会导致窗口崩溃而关闭。解决方法是使用多线程。这里我的代码写的有点乱,不好使用多线程,嘻嘻。
  • 界面没有自使适应。我用了layout布局,但是不知道为什么没用,再看看吧。

爬取新浪网股票并实现界面化1.0(pyqt5)相关推荐

  1. 爬取新浪网股票并实现图形化2.0(pyqt5)

    股票2.0版 上一篇的升级版.将数据可视化. 主运行文件 [gupiao_graph.py] import sys from PyQt5.QtWidgets import QApplication, ...

  2. Python爬虫尝试-爬取指定股票的财务报表(东方财富网)

    Python爬虫 爬取财务报表(东方财富网) 爬取指定股票的财务报表 需求确认 思考实现 获取所有报告的url地址 根据获取的url地址下载文件或者输出正文内容 爬取指定股票的财务报表 需求确认 最经 ...

  3. 经典爬虫:用Scrapy爬取百度股票

    前言 今天我们编写一个用 Scrapy 框架来爬取百度股票的代码,之前写过一篇爬取百度股票的文章(点我),代码的逻辑和这篇文章的逻辑是一样的,用到的解析器不同罢了. Scrapy 爬虫框架 Scrap ...

  4. python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件

    python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件 import requests import pandas as pd# market: 0:沪市 1:深市 # ...

  5. Python爬取所有股票数据并进行数据分析

    一.背景:作为一个程序员,总喜欢在股市里面晃荡,无奈总是当成韭菜收割了.每一次都是卖涨买跌,处处碰壁.但是作为一个有一定阅历的程序员本能告诉自己,只要掌握了大量的股票数据,就可以在信息渠道落后的情况下 ...

  6. 我的第一篇博客:Python爬取新浪财经股票页面 并用matplotlib可视化输出结果

    (由于疫情在家闲着,开学至少得等到四月份,便在上个星期动起了学习python的念头,凭借着大一C语言微薄的基础草草学习语法后便开始了学写爬虫.跟着教学视频爬了几个静态网站后便开始尝试爬动态网站,同时也 ...

  7. 用Python爬取最新股票数据含完整源代码

    用Python爬取最新股票数据含完整源代码 抓取目标: url:http://webapi.cninfo.com.cn/#/marketDataDate 数据目标: 获取 证券代码 证券简称 交易日期 ...

  8. python爬取所有股票报道

    前言 由于毕设是要对股票的新闻报道进行情感分析,所以爬取所有股票的个股资是必要的前提工作了.一开始准备直接在 [东方财富网](http://quote.eastmoney.com/stocklist. ...

  9. 用python爬取东方财富股票

    ** ## 用python爬取东方财富股票 ** 本代码源于中国大学mooc上的北京理工大学嵩天老师的课程,本人对其代码进行了修改仅供学习交流,菜鸟新手,各位大佬勿喷,有不对的地方多多指出. impo ...

最新文章

  1. 深入理解argparse模块中的add_argument的参数(如action等)
  2. dataframe两个表合并_史上代码最少的工作表拆分,仅需5行,不可思议
  3. 【Java】单循环链表解决约瑟夫环问题
  4. Java中CAS(Compare And Swap,比较和交换)算法的技术原理简述
  5. batch入门教程(4)
  6. windows server 2003 32位支持8G内存
  7. Project: Individual Project - Word frequency program
  8. 2. sales quote merge before
  9. 计算机操作系统|汤小丹|第四版|习题答案(七)
  10. HTML5七夕情人节表白网页制作【一起跨年表白代码】HTML+CSS+JavaScript
  11. 电子书籍检索下载很好的网站推荐
  12. linux shell 统计词频,shell之词频统计
  13. 嵌入式实操----基于RT1170 移植mbw做SDRAM带宽测试(三十一)
  14. 计算机专业裁合词英语,计算机专业英语的构词方法
  15. Airbnb是如何创造更好的邮件体验的
  16. 网站源码、模板分享(前端)
  17. 十年一剑,股票自动交易实验(寻找股海宝藏之旅—解锁股市交易更多姿势)
  18. Dart中Map的使用
  19. Python如何查询版本号
  20. python第六章习题答案

热门文章

  1. 三个免费物联网平台推荐
  2. 周末在家学习echarts
  3. 李尚龙《你只是看起来很努力》| 要学会避开弱者思维
  4. [Flex] 组件Tree系列 —— 运用variableRowHeight和wordWrap设置可变行高
  5. 与苹果斗争,可以不优雅,但要有用
  6. 12306网站、抢票插件以及偶写的自动订票小程序
  7. 图表示学习和异质信息网络
  8. 证实了,百度没有快照了
  9. 数据透视表自动刷新的vba代码
  10. STM8S自学笔记-003 GPIO输出:点亮LED灯 and 跑马灯特效