Python 은 PyQt 5 를 이용 하여 네트워크 의 실시 간 NBA 데 이 터 를 얻 고 방송 하 는 GUI 프로그램 을 만 듭 니 다.
생각 을 정리 하 다.
우리 가 여기 서 선택 한 것 은 바 이 두 스포츠 가 가 져 온 데이터 입 니 다.우 리 는 바 이 두 에서 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 데이터 방송 프로그램 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.