我编写了一个程序来解析来自网站的新闻。
我想QListWidget
在单击按钮后显示所有新闻,但我的程序关闭了。
主文件
import sys
from PyQt5 import QtCore, QtWidgets, QtGui
from guiparsing import *
from parsinggamenews import get_data_gamenews
import json
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MyWin, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.bth_parsinggamenews.clicked.connect(self.parsing_gamenews)
def parsing_gamenews(self):
with open('gamenewsresult.json', 'r', encoding='utf8') as file:
src = json.load(file)
self.ui.l_log.addItem(src)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
guiparsing.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'parsinggamen.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# 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, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(650, 500)
MainWindow.setStyleSheet("background-color: rgb(168, 168, 168);")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.l_log = QtWidgets.QListWidget(self.centralwidget)
self.l_log.setGeometry(QtCore.QRect(0, 0, 400, 500))
self.l_log.setStyleSheet("background-color: rgb(255, 255, 255);\n"
"background-color: rgb(213, 213, 213);")
self.l_log.setObjectName("l_log")
self.bth_parsinggamenews = QtWidgets.QPushButton(self.centralwidget)
self.bth_parsinggamenews.setGeometry(QtCore.QRect(400, 0, 250, 41))
font = QtGui.QFont()
font.setFamily("Arial")
font.setBold(True)
font.setItalic(False)
font.setWeight(75)
self.bth_parsinggamenews.setFont(font)
self.bth_parsinggamenews.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
self.bth_parsinggamenews.setMouseTracking(False)
self.bth_parsinggamenews.setStyleSheet("background-color: rgb(213, 213, 213);")
self.bth_parsinggamenews.setObjectName("bth_parsinggamenews")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.bth_parsinggamenews.setText(_translate("MainWindow", "Parsing Game News"))
解析gamenews.py
from bs4 import BeautifulSoup
import requests
import json
import lxml
def get_data_gamenews():
a_all_card = []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'
}
url = 'https://www.gamespot.com/news/'
result = requests.get(url=url, headers=headers)
soup = BeautifulSoup(result.text, 'lxml')
all_cards = soup.find_all('div', class_='card-item base-flexbox flexbox-align-center width-100 border-bottom-grayscale--thin')
for card in all_cards:
card_url = 'https://www.gamespot.com' + card.find('a').get("href")
card_title = card.find('h4', class_='card-item__title').text.replace('\"', '')
a_all_card.append({
'card_title': card_title,
'card_url': card_url
})
with open('gamenewsresult.json', 'w', encoding='utf8') as file:
json.dump(a_all_card, file, indent=4, ensure_ascii=False)
def main():
get_data_gamenews()
if __name__ == "__main__":
main()
试试这样: