RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1423479
Accepted
Akatsyki
Akatsyki
Asked:2022-08-24 17:39:03 +0000 UTC2022-08-24 17:39:03 +0000 UTC 2022-08-24 17:39:03 +0000 UTC

读取 json 文件时程序关闭

  • 772

我编写了一个程序来解析来自网站的新闻。
我想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()
python json
  • 1 1 个回答
  • 22 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2022-08-24T20:17:55Z2022-08-24T20:17:55Z

    试试这样:

    import sys
    import json
    from PyQt5 import QtCore, QtWidgets, QtGui
    from PyQt5.Qt import * 
    
    # from guiparsing import Ui_MainWindow
    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"))
    
    
    # ??? from parsinggamenews import get_data_gamenews
    # этот модуль вы запускаете отдельно !?
    
    
    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)
            print(f'{type(src)}') # 
            self.ui.l_log.clear()                                                   # +++
            for item in src:                                                        # +++
                self.ui.l_log.addItem(f"{item['card_title']}\n{item['card_url']}")  # +++
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        myapp = MyWin()
        myapp.show()
        sys.exit(app.exec_())
    

    在此处输入图像描述

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5