当前位置: 首页 > news >正文

数据集搜集器(百科)008

对数据集搜集器(百科)007进行一下改进:
错误处理:增加更多的错误处理,比如网络请求超时、解析错误等。
用户界面:增加一些提示信息,让用户更清楚当前的操作状态。
多线程处理:确保多线程处理更加安全,避免多个线程同时操作同一资源。
日志记录:增加更多的日志记录,方便调试和追踪问题。
配置文件:引入配置文件,方便修改一些常量(如记录文件夹名称)。
完善后的代码
python

import tkinter as tk
from tkinter import filedialog, messagebox
import requests
from bs4 import BeautifulSoup
import json
import os
import threading
from tkinter import ttk
import logging# 配置日志
logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 读取配置文件
CONFIG_FILE = 'config.json'
DEFAULT_CONFIG = {"record_folder": "记录","log_file": "app.log"
}def load_config():if os.path.exists(CONFIG_FILE):with open(CONFIG_FILE, 'r', encoding='utf-8') as file:return json.load(file)return DEFAULT_CONFIGconfig = load_config()class BaikeSearchApp:def __init__(self, root):self.root = rootself.root.title("百度百科查询工具")# 创建输入框self.input_label = tk.Label(root, text="输入问题:")self.input_label.pack(pady=5)self.input_entry = tk.Entry(root, width=80)self.input_entry.pack(pady=5)# 创建文本框self.text = tk.Text(root, wrap='word', height=20, width=80)self.text.pack(pady=10)# 创建按钮self.load_button = tk.Button(root, text="加载文件", command=self.load_file)self.load_button.pack(side=tk.LEFT, padx=10)self.query_button = tk.Button(root, text="获取回答", command=self.get_answer)self.query_button.pack(side=tk.LEFT, padx=10)self.save_button = tk.Button(root, text="保存记录", command=self.save_record)self.save_button.pack(side=tk.LEFT, padx=10)self.history_button = tk.Button(root, text="查看历史记录", command=self.show_history)self.history_button.pack(side=tk.LEFT, padx=10)self.help_button = tk.Button(root, text="帮助", command=self.show_help)self.help_button.pack(side=tk.LEFT, padx=10)# 创建状态栏self.status_var = tk.StringVar()self.status_bar = tk.Label(root, textvariable=self.status_var, bd=1, relief=tk.SUNKEN, anchor=tk.W)self.status_bar.pack(side=tk.BOTTOM, fill=tk.X)# 创建进度条self.progress = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate")self.progress.pack(pady=10)# 初始化历史记录self.history = []self.root.protocol("WM_DELETE_WINDOW", self.on_closing)def on_closing(self):if hasattr(self, 'thread') and self.thread.is_alive():messagebox.showinfo("提示", "请等待所有任务完成后再关闭窗口。")else:self.root.destroy()def load_file(self):file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])if file_path:with open(file_path, 'r', encoding='utf-8') as file:lines = file.readlines()total_lines = len(lines)self.progress["maximum"] = total_linesfor i, line in enumerate(lines):self.text.insert(tk.END, f"问题: {line.strip()}\n")self.get_answer(line.strip())self.progress["value"] = i + 1self.root.update_idletasks()self.status_var.set(f"已加载文件: {file_path}")def get_answer(self, query=None):if not query:query = self.input_entry.get().strip()if not query:query = self.text.get("insert linestart", "insert lineend").strip()if not query:messagebox.showwarning("警告", "请先输入或选择一个问题")returnself.status_var.set(f"正在查询: {query}")logging.info(f"开始查询: {query}")self.thread = threading.Thread(target=self._get_answer, args=(query,))self.thread.start()def _get_answer(self, query):url = f"https://baike.baidu.com/item/{query}"try:response = requests.get(url, timeout=10)response.raise_for_status()soup = BeautifulSoup(response.content, 'html.parser')# 从<meta>标签中提取描述description_tag = soup.find('meta', attrs={'name': 'description'})if description_tag and 'content' in description_tag.attrs:content = description_tag['content']else:content = "未找到相关词条"answer = {"question": query,"human_answers": [content],"chatgpt_answers": [content]}formatted_answer = f"问题: {query}\n答案: {content}\n\n"self.text.insert(tk.END, formatted_answer)self.history.append(answer)self.status_var.set(f"查询完成: {query}")logging.info(f"查询完成: {query}")except requests.RequestException as e:self.text.insert(tk.END, f"请求失败: {e}\n")self.status_var.set("请求失败")logging.error(f"请求失败: {e}")def save_record(self):record_folder = config["record_folder"]if not os.path.exists(record_folder):os.makedirs(record_folder)with open(os.path.join(record_folder, "bata.txt"), 'w', encoding='utf-8') as file:for record in self.history:file.write(json.dumps(record, ensure_ascii=False) + "\n")self.status_var.set("记录已保存")def show_history(self):history_window = tk.Toplevel(self.root)history_window.title("历史记录")history_text = tk.Text(history_window, wrap='word', height=20, width=80)history_text.pack(pady=10)for record in self.history:history_text.insert(tk.END, json.dumps(record, ensure_ascii=False) + "\n")clear_button = tk.Button(history_window, text="清空历史记录", command=self.clear_history)clear_button.pack(pady=10)def clear_history(self):self.history = []self.text.delete(1.0, tk.END)self.status_var.set("历史记录已清空")def show_help(self):help_window = tk.Toplevel(self.root)help_window.title("帮助文档")help_text = tk.Text(help_window, wrap='word', height=20, width=80)help_text.pack(pady=10)help_content = """使用说明:1. 在输入框中输入问题,点击“获取回答”按钮查询答案。2. 点击“加载文件”按钮,选择包含问题的文本文件,批量查询答案。3. 查询结果会显示在文本框中,并自动保存到历史记录。4. 点击“保存记录”按钮,将历史记录保存到文件中。5. 点击“查看历史记录”按钮,查看和管理历史记录。6. 点击“帮助”按钮,查看使用说明。"""help_text.insert(tk.END, help_content)if __name__ == "__main__":root = tk.Tk()app = BaikeSearchApp(root)root.mainloop()

主要改进点

配置文件:引入了 config.json 文件来存储一些常量,如记录文件夹名称。
错误处理:增加了网络请求的超时处理。
日志记录:增加了更多的日志记录,方便调试和追踪问题。
用户界面:增加了更多的状态提示,让用户更清楚当前的操作状态。

相关文章:

数据集搜集器(百科)008

对数据集搜集器&#xff08;百科&#xff09;007进行一下改进&#xff1a; 错误处理&#xff1a;增加更多的错误处理&#xff0c;比如网络请求超时、解析错误等。 用户界面&#xff1a;增加一些提示信息&#xff0c;让用户更清楚当前的操作状态。 多线程处理&#xff1a;确保多…...

Java学习,反射

Java反射是Java编程语言的一个重要特性&#xff0c;它允许程序在运行时查看任意对象所属的类&#xff0c;获取类的内部信息&#xff08;包括构造器、字段和方法等&#xff09;&#xff0c;并能动态地调用对象的方法或构造器。 反射概念 反射&#xff08;Reflection&#xff09…...

数据结构 (18)数的定义与基本术语

前言 数据结构是计算机科学中的一个核心概念&#xff0c;它描述了数据元素之间的关系以及这些元素在计算机中的存储方式。 一、数的定义 在计算机科学中&#xff0c;“数”通常指的是树形数据结构&#xff0c;它是一种非线性的数据结构&#xff0c;由节点&#xff08;或称为元素…...

Flink的双流join理解

如何保证Flink双流Join准确性和及时性、除了窗口join还存在哪些实现方式、究竟如何回答才能完全打动面试官呢。。你将在文中找到答案。 1 引子 1.1 数据库SQL中的JOIN 我们先来看看数据库SQL中的JOIN操作。如下所示的订单查询SQL&#xff0c;通过将订单表的id和订单详情表ord…...

《使用Python进行数据挖掘:理论、应用与案例研究》

嘿&#xff0c;今天我要给你们介绍一本使用Python进行数据挖掘的好书。这本书是由吴迪博士撰写的&#xff0c;他是雷曼学院商学院的助理教授&#xff0c;也是数据科学的实战派。 在这个时代&#xff0c;数据多得让人眼花缭乱&#xff0c;要从中找出有用的信息&#xff0c;那可不…...

Go语言技巧:快速统一字符串中的换行符,解决跨平台问题

统一字符串中的 Windows \r\n 换行符 — Go语言实现 在编程中&#xff0c;尤其是处理跨平台的文本数据时&#xff0c;换行符的处理是一个常见的问题。Windows 系统使用 \r\n 作为换行符&#xff0c;而 Unix-like 系统&#xff08;如 Linux 和 macOS&#xff09;使用 \n。在 Go…...

算法训练营day20(二叉树06:最大二叉树,合并二叉树,搜索二叉树,验证搜索二叉树)

第六章 二叉树 part06 今日内容 ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树 详细布置 654.最大二叉树 又是构造二叉树&#xff0c;昨天大家刚刚做完 中序后序确定二叉树&#xff0c;今天做这个 应该会容易一些&#xff0c; 先看视…...

Leetcode(区间合并习题思路总结,持续更新。。。)

讲解题目&#xff1a;合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c; 并返回一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间。示例 1&#xff1a;输入&a…...

『python爬虫』使用docling 将pdf或html网页转为MD (保姆级图文)

目录 预览效果安装下载模型测试代码总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 预览效果 支持转化pdf的表格 安装 Docling 本身是专注于文档转换的工具&#xff0c;通常用于将文件&#xff08;如 PDF&…...

elasticsearch现有集群扩展节点

原文地址&#xff1a;elasticsearch现有集群扩展节点 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 给现有的 elasticsearch 集群扩展节点比较容易&#xff0c;已有的集群不需要做任何修改&#xff0c;也不用对服务做任何处理&#xff0c;只需…...

力扣162:寻找峰值

峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须实现时间复杂度为 O(…...

Kafka-Connect

一、概述 Kafka Connect是一个在Apache Kafka和其他系统之间可扩展且可靠地流式传输数据的工具。细心的你会发现&#xff0c;我们编写的producer、consumer都有很多重复的代码&#xff0c;KafkaConnect就是将这些通用的api进行了封装。让我们可以只关心业务部分&#xff08;数…...

递归、搜索与回溯算法 - 3 ( floodfill 记忆化搜素 9000 字详解 )

一&#xff1a;floodfill 算法 1.1 图像渲染 题目链接&#xff1a;图像渲染 class Solution {// 首先先定义四个方向的向量int[] dx {0, 0, 1, -1};int[] dy {1, -1, 0, 0};// 接着用 m 记录行数&#xff0c;n 记录列数&#xff0c;prev 记录 (sr&#xff0c; sc) 位置的…...

YOLOv9改进,YOLOv9引入CAS-ViT(卷积加自注意力视觉变压器)中AdditiveBlock模块,二次创新RepNCSPELAN4结构

摘要 CAS-ViT 是一种为高效移动应用设计的视觉Transformer。模型通过结合卷积操作与加性自注意机制,在保持高性能的同时显著减少计算开销,适合资源受限的设备如手机。其核心组件 AdditiveBlock 通过多维度信息交互和简化的加性相似函数,实现了高效的上下文信息整合,避免了…...

HDLCPPP原理与配置

前言: 广域网中经常会使用串行链路来提供远距离的数据传输&#xff0c;高级数据链路控制HDLC&#xff08; High-Level Data Link Control &#xff09;和点对点协议PPP&#xff08; Point to Point Protocol&#xff09;是两种典型的串口封装协议。 HDLC协议&#xff1a; 原理…...

react + vite 中的环境变量怎么获取

一、Vite 环境变量基础 创建一个.env文件&#xff0c;Vite 定义的环境变量需要以VITE_开头。 VITE_API_URL "http://localhost:3000/api" 生产模式创建.env.production。 VITE_API_URL "https://production-api-url.com/api" 二、在 React 组件中获…...

知识蒸馏中有哪些经验| 目标检测 |mobile-yolov5-pruning-distillation项目中剪枝知识分析

项目地址&#xff1a;https://github.com/Syencil/mobile-yolov5-pruning-distillation 项目时间&#xff1a;2022年 mobile-yolov5-pruning-distillation是一个以yolov5改进为主的开源项目&#xff0c;主要包含3中改进方向&#xff1a;更改backbone、模型剪枝、知识蒸馏。这里…...

Oracle 19c RAC单节点停机维护硬件

背景 RAC 环境下一台主机硬件光纤卡不定时重启&#xff0c;造成链路会间断几秒&#xff0c;期间数据库会话响应时间随之变长&#xff0c;该光纤卡在硬件厂商的建议下&#xff0c;决定停机更换备件&#xff0c;为保证生产影响最小&#xff0c;决定停掉该节点&#xff0c;另外节…...

Linux系统 进程

Linux系统 进程 进程私有地址空间用户模式和内核模式上下文切换 进程控制系统调用错误处理进程控制函数获取进程 ID创建和终止进程回收子进程让进程休眠加载并运行程序 进程 异常是允许操作系统内核提供进程&#xff08;process&#xff09;概念的基本构造块&#xff0c;进程是…...

机载视频流回传+编解码方案

无线网络&#xff0c;低带宽场景。不能直接转发ROS raw image&#xff08;10MB/s&#xff09;&#xff0c;而要压缩&#xff08;编码&#xff09;后再传输。可以用rtsp的udp传输或者直接传输话题&#xff0c;压缩方法有theora&#xff08;ROS image_transport默认支持&#xff…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...