alt

用到的软件: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())