用到的软件:Pycharm,Qtdesigner,SQLiteStudio
draw.py(绘制图表):
import sqlite3
import matplotlib.pyplot as plt
import numpy as np
class draw():
def __init__(self):
super(draw, self).__init__()
self.get()
def get(self):
con = sqlite3.connect("NBA.db")
cur = con.cursor()
sql = "select rate from NBA"
reusltList = cur.execute(sql)
list=[]
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
for result in reusltList:
typeList = str(result[0]).split("\t")
for i in range(len(typeList)):
type = typeList[i]
list.append(type)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = [float(d.strip('%')) for d in list]
bins = np.arange(26,67,2)
hist_data, bin_edges = np.histogram(data, bins=bins)
plt.bar(bin_edges[0:-1],hist_data, width=2,edgecolor='black',color='yellow')
plt.xticks(np.arange(25,67,2))
plt.title("胜率分布")
plt.xlabel("胜率区间")
plt.ylabel("队伍数量")
plt.show()
if __name__ == '__main__':
draw()
pa.py(爬取数据):
import requests
from lxml import etree
import sqlite3
class pa():
def __init__(self):
super(pa, self).__init__()
self.main()
def main(self):
conn = sqlite3.connect("NBA.db")
cur = conn.cursor()
url = "https://sports.qq.com/nba/index.shtml"
self.getData(url,conn,cur)
return "ok"
def askUrl(self,url):
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
response = requests.get(url,headers = head)
# print(response)
html = response.content.decode("gbk")
return html
def getData(self,url,conn,cur):
sql = "delete from NBA"
cur.execute(sql)
conn.commit()
for i in range(0,25,25):
src = "NBA_腾讯体育_腾讯网_NBA中国数字媒体独家官方合作伙伴.html"
parser = etree.HTMLParser(encoding="gbk")
html = etree.parse(src, parser=parser)
t = html.xpath('//div[@class="list"]/table/tbody/tr')
baseurl = url.format(i)
html = self.askUrl(baseurl)
l=1
for li in range(len(t)):
name = t[li].xpath('.//td[2]/a/text()')[0]
sheng=t[li].xpath('.//td[3]/text()')[0]
fu=t[li].xpath('.//td[4]/text()')[0]
rate=t[li].xpath('.//td[5]/text()')[0]
print(l,name,sheng,fu,rate)
l+=1
sql = "insert into NBA(name,sheng,fu,rate) values('{0}','{1}','{2}','{3}')"
sqllist = sql.format(name,sheng,fu,rate)
# print(sqllist)
cur.execute(sqllist)
conn.commit()
cur.close()
conn.close()
# import requests
# from lxml import etree
# def main():
# url = "https://movie.douban.com/top250?start={}"
# getData(url)
# def askUrl(url): 定义了一个请求地址的方法,参数是url(网址)
# # 请求头
# head = {
# # 伪装浏览器
# "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
# }
# response = requests.get(url, headers=head)
# print(response)
# # 获取响应中的页面内容
# html = response.content.decode("utf8")
# return html
untitled.py(在Qtdesigner里面建立即可):
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setGeometry(QtCore.QRect(70, 70, 151, 351))
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.pushButton = QtWidgets.QPushButton(self.frame)
self.pushButton.setGeometry(QtCore.QRect(30, 40, 91, 31))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.frame)
self.pushButton_2.setGeometry(QtCore.QRect(30, 100, 91, 31))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.frame)
self.pushButton_3.setGeometry(QtCore.QRect(30, 190, 91, 61))
self.pushButton_3.setObjectName("pushButton_3")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(220, 70, 471, 351))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(4)
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)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "输出数据"))
self.pushButton_2.setText(_translate("MainWindow", "爬取数据"))
self.pushButton_3.setText(_translate("MainWindow", "分析数据"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "name"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "sheng"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "fu"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "rate"))
NBA.py(主代码):
import sys
import sqlite3
from threading import Thread
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QTableWidgetItem,QMessageBox
from pa import pa
from untitled import Ui_MainWindow
from draw import draw
coon=sqlite3.connect("NBA.db")
cur=coon.cursor()
class mainwork(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super(mainwork,self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.getData)
self.pushButton_2.clicked.connect(self.scan)
self.tableWidget.doubleClicked.connect(self.scanList)
self.pushButton_3.clicked.connect(self.tongji)
def getData(self):
worker=Thread(target=pa)
worker.start()
def scan(self):
sql="select * from NBA"
result=cur.execute(sql)
for index,data in enumerate(result):
if index==0:
self.tableWidget.setColumnCount(len(data))
self.tableWidget.insertRow(index)
for rindex,rdata in enumerate(data):
tableData=QTableWidgetItem()
tableData.setText(str(rdata))
self.tableWidget.setItem(index,rindex,tableData)
# self.tableWidget.clear()
def scanList(self):
row=self.tableWidget.currentRow()
colCount=self.tableWidget.columnCount()
list=''
for col in range(colCount):
header=self.tableWidget.horizontalHeaderItem(col)
header_text=header.text()
text=self.tableWidget.item(row,col).text()
print(text)
list +=header_text+":"+text+"\n"
QMessageBox.about(self.tableWidget,"数据:",list)
def tongji(self):
draw()
if __name__=='__main__':
app=QApplication(sys.argv)
list=mainwork()
list.show()
sys.exit(app.exec())