gunkpoke 2024-02-17 23:49 采纳率: 75%
浏览 2
已结题

python请求帮助如何制作查询框

请求帮助
我写的这个程序可以正常的运行并且可以正常地输出结果,但是就是怎么可以让我第二次运行的结果自动覆盖掉第一次的结果呀,以及我想制作一个查询的界面,就是用pyqt5做一个输入查询的英雄就出来这个英雄最低战力地区的界面,这个怎么做到啊

img

import csv
import requests
import re

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}

hero_url = 'https://pvp.qq.com/web201605/herolist.shtml'
response = requests.get(url=hero_url, headers=headers)
response.encoding = 'gbk'
heros = re.findall('alt=".*?">(.*?)</a>', response.text)[0:93]

# 新建一个列表,用于保存所有英雄的信息
hero_info_list = []

for hero in heros:
    url = f'https://www.sapi.run/hero/select.php?hero={hero}&type=qq'
    res = requests.get(url)
    data = res.json()['data']
    name = data['name']
    area = data['area']
    areaPower = data['areaPower']
    city = data['city']
    cityPower = data['cityPower']
    province = data['province']
    provincePower = data['provincePower']
    platform = data['platform']
    updatetime = data['updatetime']

    # 构建一个字典,保存当前英雄的信息
    hero_info = {
        '英雄名称': name,
        '服务区': platform,
        '更新时间': updatetime,
        '铜牌区域': area,
        '铜牌分数': areaPower,
        '银牌区域': city,
        '银牌分数': cityPower,
        '金牌区域': province,
        '金牌分数': provincePower
    }

    # 将当前英雄的信息加入到列表中
    hero_info_list.append(hero_info)

# 将所有英雄的信息写入CSV文件
with open('最低战力.csv', mode='a', encoding='utf-8_sig', newline='') as f:
    csv_writer = csv.DictWriter(f, fieldnames=['英雄名称', '服务区', '更新时间', '铜牌区域', '铜牌分数', '银牌区域',
                                               '银牌分数', '金牌区域', '金牌分数'])
    # 如果文件为空,先写入表头
    if f.tell() == 0:
        csv_writer.writeheader()
    # 写入所有英雄的信息
    csv_writer.writerows(hero_info_list)

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-17 23:51
    关注

    引自免费微信小程序:皆我百晓生

    为了实现你的需求,你需要使用PyQt5库创建一个GUI应用,其中包含一个查询输入框和结果显示区域。以下是一个简化的示例代码,展示如何构建这样一个界面,并在用户输入英雄名称后从你现有的数据处理程序中获取并显示结果:

    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QTextEdit, QPushButton
    from PyQt5.QtCore import Qt
    
    # 保留你原来的抓取数据的函数
    def fetch_hero_info(hero_name):
        # ...此处是你的原有代码,用于根据hero_name获取hero_info...
        # 简化模拟返回结果,实际应调用你上面的requests和解析逻辑
        hero_info = {
            '英雄名称': hero_name,
            '服务区': '某区',
            '更新时间': '2023-01-01',
            '铜牌区域': '区域A',
            '铜牌分数': '1000',
            '银牌区域': '区域B',
            '银牌分数': '2000',
            '金牌区域': '区域C',
            '金牌分数': '3000'
        }
        return hero_info
    
    class HeroQueryWidget(QWidget):
        def __init__(self):
            super().__init__()
    
            self.setWindowTitle('英雄战力查询')
    
            self.layout = QVBoxLayout()
    
            self.query_input = QLineEdit()
            self.query_input.setPlaceholderText("请输入英雄名称")
            self.query_button = QPushButton("查询")
            self.query_button.clicked.connect(self.on_query_clicked)
    
            self.result_text = QTextEdit(readOnly=True)
    
            self.layout.addWidget(self.query_input)
            self.layout.addWidget(self.query_button)
            self.layout.addWidget(self.result_text)
    
            self.setLayout(self.layout)
    
        def on_query_clicked(self):
            hero_name = self.query_input.text()
            hero_info = fetch_hero_info(hero_name)
            
            result_text = ""
            for key, value in hero_info.items():
                result_text += f"{key}: {value}\n"
    
            self.result_text.setText(result_text)
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
    
        widget = HeroQueryWidget()
        widget.show()
    
        sys.exit(app.exec_())
    

    这个代码片段首先定义了一个HeroQueryWidget类,该类包含一个输入框、一个按钮和一个文本编辑区域(用于显示查询结果)。当用户点击查询按钮时,会触发on_query_clicked方法,该方法读取输入框中的英雄名称,调用fetch_hero_info函数获取相应信息,并将结果显示在文本编辑区域。

    请注意,我假设了fetch_hero_info函数能够正确获取指定英雄的信息,这里仅作为模拟返回固定数据。你应当将其替换为你的原始数据处理代码块以实现真正的查询功能。

    关于覆盖CSV文件的问题,如果你想每次运行都覆盖原有内容而不是追加,只需在写入CSV文件时将模式由'a'改为'w'即可:

    with open('最低战力.csv', mode='w', encoding='utf-8_sig', newline='') as f:
        # ...其余保持不变...
    

    这将会在每次运行时清空并重新写入CSV文件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 excel 上下按钮 显示行
  • ¥20 搭建三相栅极电路后高侧浮动地VS存在电容特性
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
  • ¥20 海思 nnie 编译 报错
  • ¥50 决策面并仿真,要求有仿真结果图
  • ¥15 关于路由器的路由协议配置
  • ¥15 springboot接入微信支付SDK
  • ¥50 大区域的遥感影像匹配 怎么做啊
  • ¥15 求解答:pytorch跑yolov8神经网络受挫