Python 은 PyQt 5 를 이용 하여 네트워크 의 실시 간 NBA 데 이 터 를 얻 고 방송 하 는 GUI 프로그램 을 만 듭 니 다.

16165 단어 PythonPyQt5순서
NBA 데이터 파충류 만 들 기
생각 을 정리 하 다.
우리 가 여기 서 선택 한 것 은 바 이 두 스포츠 가 가 져 온 데이터 입 니 다.우 리 는 바 이 두 에서 NBA 를 직접 검색 하여 홈 페이지 로 넘 어 갑 니 다.우 리 는 바 이 두 가 이미 우리 에 게 관련 데 이 터 를 제공 한 것 을 볼 수 있 습 니 다.
在这里插入图片描述
우리 가 클릭 해서 들 어가 면 이것 은 매우 간결 한 사이트 라 는 것 을 알 수 있다.
在这里插入图片描述
이 주소 표시 줄 을 살 펴 보 니 불규칙https://tiyu.baidu.com/live/detail/576O5Zu955S35a2Q6IGM5Lia56%2Bu55CD6IGU6LWbI2Jhc2tldGJhbGwjMjAyMS0wNi0xMyPniLXlo6t2c%2BWspritq%2BiIuQ%3D%3D/from/baidu_aladdin在这里插入图片描述
좋아,다시 찾 아 볼 수 밖 에 없어.우 리 는 전체 탭 을 클릭 해서 이것 이 인터넷 주소 라 는 것 을 발견 하면 훨씬 쉬 워 질 거 야.
在这里插入图片描述
여기 서 우리 가 얻 고 싶 은 것 은 구체 적 인 모든 절 데이터 와 총 점 일 뿐 입 니 다.그리고 사용자 가 다른 수요 가 있다 면 우 리 는 이 를 바 이 두 사이트 로 직접 보 냅 니 다.
在这里插入图片描述
기어 오 르 는 사고방식 은 대략 이렇다.먼저 홈 페이지 를 방문 한 다음 에 산하의 오늘 경 기 를 방문 하고 마지막 에 경기 결 과 를 되 돌려 준다.
코드 를 작성 하 다
우선 저 희 는 REQUESTS 를 사용 하여 인터넷 주 소 를 방문 합 니 다.
在这里插入图片描述
우 리 는 바 이 두 가 어떠한 제한 도 하지 않 고 직접 방문 해도 내용 을 얻 을 수 있다 는 것 을 볼 수 있다.
在这里插入图片描述
다음은 분석 라 이브 러 리 를 사용 하여 분석 하 겠 습 니 다.
在这里插入图片描述
우선 메 인 탭 으로 프로그램 을 찾 습 니 다.
在这里插入图片描述
코드 는 이 렇 습 니 다.코드 를 실행 하면 전체 코드 가 많이 들 어 갔 음 을 알 수 있 습 니 다.
在这里插入图片描述
在这里插入图片描述
주요 페이지 를 가 져 옵 니 다.저 희 는 FIND 함 수 를 사용 하여 추가 작업 을 진행 합 니 다.
在这里插入图片描述
우 리 는 성공 적 으로 이 홈 페이지 를 찾 았 다.다음은 우리 가 최근 몇 차례 의 경기 정보 와 상세 한 페이지 를 얻 기 시작 한 것 이다.
在这里插入图片描述
코드 를 변경 하면 우 리 는 모든 경기 정 보 를 직접 얻 을 수 있 습 니 다.
在这里插入图片描述
사 이 트 를 테스트 할 때 바 이 두 가 AJAX 기술 을 사용 한 것 을 발 견 했 습 니 다.즉,당신 이 한꺼번에 얻 은 사이트 소스 코드 는 다섯 개 밖 에 없 을 것 입 니 다.그리고 다시 불 러 와 야 다음 데 이 터 를 얻 을 수 있 습 니 다.그러나 이것 도 우리 프로그램 에 있어 서 매우 좋다.우 리 는 원래 그렇게 많은 데 이 터 를 필요 로 하지 않 았 다.
在这里插入图片描述
우 리 는 여기에서 모든 날 짜 를 찾 았 습 니 다.대상 을 데이트 로 찾 았 습 니 다.그 다음 에 우 리 는 그것 을 문자열 로 바 꾸 었 습 니 다.바 이 두 위 에 이 날짜 가 들 어 갔 기 때문에 우 리 는 뒤에 STRIP()를 추가 하여 문자열 앞의 빈 칸 을 취소 합 니 다.이런 식 으로 경기 주 소 를 얻 습 니 다.
在这里插入图片描述 在这里插入图片描述
여기에서 우 리 는 문자열 을 맞 추 는 방법 을 사용 하여 마지막 주소 에 대한 분석 을 완성 했다.
在这里插入图片描述

#      : NBAReporter
#      : 2021 6 13 
#      : Windows 10

import requests
from bs4 import BeautifulSoup

#       
baidu_nba_url = "https://tiyu.baidu.com/match/NBA/"
request_url = "https:"
nba_dict = {}

#     
nba_res = requests.get(baidu_nba_url)
# print(nba_res.text)

#        
nba_soup = BeautifulSoup(nba_res.text, "html.parser")
nba_main = nba_soup.main
# print(nba_main)

nba_div = nba_main.find_all("div", class_ = "wa-match-schedule-list-wrapper")

for i in nba_div:
	#       
	nba_time = i.find("div", class_ = "date").string.strip()
	print(nba_time)
	#        
	nba_times = i.find("div", class_ = "list-num c-color").string
	print(nba_times)
	#          
	nba_href = i.find_all("div", class_ = "wa-match-schedule-list-item c-line-bottom")

	for url_nba in nba_href:
		url_nba = url_nba.a
		url_href = url_nba["href"]

		real_url = request_url + url_href
		print(real_url) 
그 다음 에 우 리 는 나머지 부분의 해석 을 시작 해 야 한다.우 리 는 우리 가 아직 일부 상세 한 정 보 를 얻 지 못 한 것 을 볼 수 있 기 때문에 우 리 는 상세 한 정 보 를 얻 기 시작 했다.
在这里插入图片描述
논리 에 따라 코드 를 계속 작성 하 다.
在这里插入图片描述
그리고 이 안에 있 는 값 을 가 져 오 겠 습 니 다.
在这里插入图片描述
경기 의 관련 점 수 를 얻 은 후에 우 리 는 두 개의 목록 을 만 들 었 습 니 다.한 목록 은 우리 가 잠시 후에 NBA 스타일 을 사용 해 야 한다 고 정의 하고 다른 목록 은 오늘 의 날 짜 를 저장 하고 마지막 으로 돌아 갑 니 다.
在这里插入图片描述
우 리 는 이미 여기에 있 습 니 다.이 방법 은 봉인 되 어 있 기 때문에 우 리 는 새로운 파일 을 만 들 고 직접 가 져 오 면 됩 니 다.
在这里插入图片描述
NBAReporter.py

#      : NBAReporter
#      : 2021 6 13 
#      : Windows 10

import requests
from bs4 import BeautifulSoup

def NBAReporter():
	#       
	baidu_nba_url = "https://tiyu.baidu.com/match/NBA/"
	request_url = "https:"
	nba_list = []
	today_list = []
	
	#     
	nba_res = requests.get(baidu_nba_url)
	# print(nba_res.text)

	#        
	nba_soup = BeautifulSoup(nba_res.text, "html.parser")
	nba_main = nba_soup.main
	# print(nba_main)

	nba_div = nba_main.find_all("div", class_ = "wa-match-schedule-list-wrapper")

	for i in nba_div:
		#       
		today = i.find("div", class_ = "date").string.strip()
		#        
		nba_times = i.find("div", class_ = "list-num c-color").string
		#          
		nba_href = i.find_all("div", class_ = "wa-match-schedule-list-item c-line-bottom")

		for url_nba in nba_href:
			url_nba = url_nba.a
			url_href = url_nba["href"]

			real_url = request_url + url_href
			# print(real_url) 

			#       
			vs_time = url_nba.find("div", class_ = "font-14 c-gap-bottom-small").string
			vs_finals = url_nba.find("div",class_ = "font-12 c-color-gray").string

			team_row_1 = url_nba.find("div", class_ = "team-row")
			team_row_2 = url_nba.find("div", class_ = "c-gap-top-small team-row")

			"""team_row_1_png = team_row_1.find("div", class_ = "inline-block")["style"]
												team_row_2_png = team_row_2.find("div", class_ = "inline-block")["style"]
												print(team_row_1_png,team_row_2_png)"""
			team_row_1_name = team_row_1.find("span", class_ = "inline-block team-name team-name-360 team-name-320 c-line-clamp1").string
			team_row_2_name = team_row_2.find("span", class_ = "inline-block team-name team-name-360 team-name-320").string
			# print(team_row_1_name,team_row_2_name)
			team_row_1_score = team_row_1.find("span", class_ = "inline-block team-score-num c-line-clamp1").string
			team_row_2_score = team_row_2.find("span", class_ = "inline-block team-score-num c-line-clamp1").string
			# print(team_row_1_score,team_row_2_score)

			"""import re 		#   re ,            ,          
									
												team_row_1_png_url = re.search(r'background:url(.*)', team_row_1_png)
												team_row_1_png_url = team_row_1_png_url.group(1)
												team_row_2_png_url = re.search(r'background:url(.*)', team_row_2_png)
												team_row_2_png_url = team_row_2_png_url.group(1)"""

			nba = [ today, nba_times,"","",
					vs_time, vs_finals, team_row_1_name, team_row_2_name,
					"","", team_row_1_score, team_row_2_score
			]

			nba_list.append(nba)
			today_list.append(today)

	return nba_list,today_list
여기 서 저희 가 만 들 건 GUI 인터페이스의 실현 프로그램 입 니 다.
在这里插入图片描述
우선 우리 가 실행 하 는 데 필요 한 라 이브 러 리 를 가 져 옵 니 다.
在这里插入图片描述
우리 의 코드 를 간단하게 정의 하고 제목 과 다른 창 속성 을 설정 합 니 다# self.setWindowOpacity(0.5)여 기 는 창의 투명 도 를 설정 하 는 코드 입 니 다.그러나 제 테스트 를 통 해 이런 모습 이 사용자 체험 에 전혀 좋 지 않다 는 것 을 알 게 되 었 습 니 다.그래서 여기 서 저 는 이 코드 를 설명 하 였 습 니 다.
在这里插入图片描述
프로그램의 주 논 리 는 위의 그림 에서 보 듯 이 유닛 레이아웃 을 만 든 다음 에 경기 와 같은 여러 개의 탭 을 만 들 었 습 니 다.마지막 으로 함수 가 돌아 온 목록 을 탭 으로 주 창 위 에 놓 았 습 니 다.
在这里插入图片描述
마지막 으로 이 벤트 를 만 들 고 프로그램 을 실행 하면 전체 프로그램 이 완 료 됩 니 다.
NBAWindow.py

#      : NBAWindow
#      : 2021 6 14 
#      : Windows 10
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from NBAReporter import *

#          
class NBAWindow(QTabWidget):
	def __init__(self):
		super().__init__()
		self.make_Ui()

		"""		#        
		self.timer = QTimer()
		self.timer.setInterval(500)
		self.timer.timeout.connect(self.make_Ui)
		self.timer.start()"""

		self.setWindowTitle("NBA  ")
		self.setGeometry(1440,0,480,300)
		self.setFixedSize(480,300)
		self.setWindowIcon(QIcon('images/nba.png'))
		self.setStyleSheet("""background-color:red; """)
		# self.setWindowOpacity(0.5)
		self.setWindowFlags(Qt.WindowStaysOnTopHint|Qt.WindowMinimizeButtonHint|Qt.FramelessWindowHint)

	def make_Ui(self):
		self.nba,today = NBAReporter()
		self.tab = 0

		for a in self.nba:
			#         
			grid = QGridLayout()
			self.setLayout(grid)

			#         
			tab = QWidget()
			#         TAB           
			self.addTab(tab,today[self.tab])

			#          ,    
			positions = [(i, j) for i in range(3) for j in range(4)]
			nba_list = self.nba[self.tab]

			#     Tab     
			for position, nba in zip(positions, nba_list):
				#print(nba)
				#      ,    
				if nba == "":
					continue
				
				#       
				label = QLabel("<font color='black', size=5><b>%s</b></font>"%nba)
				grid.addWidget(label, *position)

				#            
				tab.setLayout(grid)

				# grid.update()

			#      
			self.tab += 1

if __name__ == '__main__':
	app = QApplication(sys.argv)
	window = NBAWindow()
	window.show()
	app.exec_()
NBAReporter.py

#      : NBAReporter
#      : 2021 6 13 
#      : Windows 10

import requests
from bs4 import BeautifulSoup

def NBAReporter():
	#       
	baidu_nba_url = "https://tiyu.baidu.com/match/NBA/"
	request_url = "https:"
	nba_list = []
	today_list = []
	
	#     
	nba_res = requests.get(baidu_nba_url)
	# print(nba_res.text)

	#        
	nba_soup = BeautifulSoup(nba_res.text, "html.parser")
	nba_main = nba_soup.main
	# print(nba_main)

	nba_div = nba_main.find_all("div", class_ = "wa-match-schedule-list-wrapper")

	for i in nba_div:
		#       
		today = i.find("div", class_ = "date").string.strip()
		#        
		nba_times = i.find("div", class_ = "list-num c-color").string
		#          
		nba_href = i.find_all("div", class_ = "wa-match-schedule-list-item c-line-bottom")

		for url_nba in nba_href:
			url_nba = url_nba.a
			url_href = url_nba["href"]

			real_url = request_url + url_href
			# print(real_url) 

			#       
			vs_time = url_nba.find("div", class_ = "font-14 c-gap-bottom-small").string
			vs_finals = url_nba.find("div",class_ = "font-12 c-color-gray").string

			team_row_1 = url_nba.find("div", class_ = "team-row")
			team_row_2 = url_nba.find("div", class_ = "c-gap-top-small team-row")

			"""team_row_1_png = team_row_1.find("div", class_ = "inline-block")["style"]
												team_row_2_png = team_row_2.find("div", class_ = "inline-block")["style"]
												print(team_row_1_png,team_row_2_png)"""
			team_row_1_name = team_row_1.find("span", class_ = "inline-block team-name team-name-360 team-name-320 c-line-clamp1").string
			team_row_2_name = team_row_2.find("span", class_ = "inline-block team-name team-name-360 team-name-320").string
			# print(team_row_1_name,team_row_2_name)
			team_row_1_score = team_row_1.find("span", class_ = "inline-block team-score-num c-line-clamp1").string
			team_row_2_score = team_row_2.find("span", class_ = "inline-block team-score-num c-line-clamp1").string
			# print(team_row_1_score,team_row_2_score)

			"""import re 		#   re ,            ,          
									
												team_row_1_png_url = re.search(r'background:url(.*)', team_row_1_png)
												team_row_1_png_url = team_row_1_png_url.group(1)
												team_row_2_png_url = re.search(r'background:url(.*)', team_row_2_png)
												team_row_2_png_url = team_row_2_png_url.group(1)"""

			nba = [ today, nba_times,"","",
					vs_time, vs_finals, team_row_1_name, team_row_2_name,
					"","", team_row_1_score, team_row_2_score
			]

			nba_list.append(nba)
			today_list.append(today)

	return nba_list,today_list
효과 시범
在这里插入图片描述
파 이 썬 이 PyQt 5 를 이용 하여 인터넷 실시 간 NBA 데 이 터 를 얻 고 방송 하 는 GUI 프로그램 을 만 드 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 PyQt 5 데이터 방송 프로그램 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기