基于Python制作一个简单的文章搜索工具

news2024/10/7 6:43:46

这篇文章主要为大家详细介绍了如何基于Python制作一个简单的文章搜索工具,都是一些基础的应用,文中的示例代码讲解详细,感兴趣的可以了解一下

 前言

今天,我无聊的时候做了一个搜索文章的软件,有没有更加的方便快捷不知道,好玩就行了。基于Python tkinter 制作文章搜索软件,都是一些基础的应用。

功能实现

 

导入模块

代码

我们首先做到第一件事是导入模块。

1

2

3

4

import tkinter as tk

import webbrowser

from tkinter import ttk

import requests

创建窗口

代码

1

2

3

4

5

root = tk.Tk()

root.title('CSDN问题搜索')

root.geometry('1000x700+100+100')

root.iconbitmap('search.ico')

root.mainloop()

这段代码创建了一个名为root的Tkinter窗口对象,并设置了窗口的标题和大小。然后,它使用root.iconbitmap()方法将一个名为search.ico的图标图像设置为窗口的图标。

root.geometry()方法用于设置窗口的位置和大小,它接受一个参数,即窗口的位置和大小。在这个例子中,我们将窗口的位置设置为(1000, 700)并将大小设置为(100, 100)

效果

 

背景图片

代码

1

2

img = tk.PhotoImage(file='benjing.png')

tk.Label(root, image=img).pack()

这行代码创建了一个名为img的PhotoImage对象,并将其设置为根窗口对象root的图像。然后,它使用tk.Label创建一个标签对象,并将图像设置为该标签的图像。最后,它使用pack()方法将标签对象放置在根窗口对象中。

效果

 

搜索文本框 

代码

1

2

3

4

5

6

7

search_frame = tk.Frame(root)

search_frame.pack(pady=12)

# 创建一个字符串变量

search_va = tk.StringVar()

tk.Label(search_frame, text='CSDN搜索', font=('黑体', 12)).pack(side=tk.LEFT, padx=6)

tk.Entry(search_frame, relief='flat', width=30, textvariable=search_va).pack(side=tk.LEFT, padx=5, fill='both')

tk.Button(search_frame, text='C一下', font=('黑体', 12), relief='flat', bg='#fe6b00').pack(side=tk.LEFT, padx=5)

这段代码创建了一个名为search_frame的Tkinter窗口对象,并将其放置在根窗口对象root中。然后,它创建了一个StringVar对象search_va,并将其设置为一个字符串变量。接下来,它创建了一个Label对象tk.Label,并将其放置在search_frame中。tk.Label对象具有一个文本属性和一个字体属性,这里使用了一个黑体字体和12号字号。tk.Entry对象具有一个文本属性和一个宽度属性,这里使用了一个30像素的宽度和一个StringVar对象search_va。最后,它创建了一个Button对象tk.Button,并将其放置在search_frame中。tk.Button对象具有一个文本属性、一个字体属性和一个背景属性,这里使用了一个黑体字体、12号字号和一个背景颜色为#fe6b00

效果

 

内容显示界面

代码

1

2

3

4

5

6

7

8

9

10

11

12

tree_view = ttk.Treeview(root,show="headings", columns=('num', 'title', 'author', 'date', 'link'))

tree_view.column("num", width=10, anchor='center')

tree_view.column('title', width=200, anchor='w')

tree_view.column('author', width=10, anchor='center')

tree_view.column('date', width=10, anchor='center')

tree_view.column('link', width=150, anchor='center')

tree_view.heading('num', text='序号')

tree_view.heading('title', text='标题')

tree_view.heading('author', text='作者')

tree_view.heading('date', text='发布时间')

tree_view.heading('link', text='链接')

tree_view.pack(fill=tk.BOTH, expand=False, pady=10)

这段代码创建了一个名为tree_view的Tkinter Treeview对象,并将根节点设置为rootshow参数设置为"headings",表示显示节点的标题。columns参数设置为一个包含节点标题、作者、发布时间和链接的列表。tree_view.column()方法用于设置每个列的宽度和锚点。tree_view.column()方法接受一个参数,即要设置宽度和锚点的列的名称。tree_view.heading()方法用于设置每个列的标题。tree_view.pack()方法用于设置节点的位置和大小,并将节点放置在根窗口对象中。tree_view.fill参数设置为"both",表示填充整个窗口,expand参数设置为True,表示展开节点,pady参数设置为10,表示节点之间的间距。

效果

 

搜索内容效果代码

到了这里,我们这个框架就写好了,那么,我们如何获取搜索功能呢。、

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

def search(word):

    search_list = []

    num = 1

    for page in range(1, 3):

        url = 'https://so.csdn.net/api/v3/search'

        data = {

            'q': word,

            'p': page,

        }

        headers = {

            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'

        }

        response = requests.get(url=url, params=data, headers=headers)

        for index in response.json()['result_vos']:

            title = index["title"].replace('<em>', '').replace('</em>', '')

            author = index["nickname"].replace('<em>', '').replace('</em>', '')

            dit = {

                'num': num,

                'title': title,

                'author': author,

                'date': index['create_time_str'],

                'link': index['url'],

            }

            num += 1

            search_list.append(dit)

    return search_list

这段代码定义了一个名为search的函数,该函数接受一个字符串参数word,并返回一个字符串列表,其中包含符合给定字符串的所有文档的标题、作者和发布时间。

该函数首先创建一个空字符串列表search_list,然后使用一个循环来搜索所有可能的页面。在每个页面上,它使用requests库发送一个HTTP GET请求,并将搜索参数作为请求的一部分传递。然后,它将响应的JSON数据解析为一个字典,其中包含每个文档的标题、作者和发布时间。然后,它将每个字典添加到search_list中,并将搜索列表的长度增加1。

最后,该函数返回search_list,该列表包含符合给定字符串的所有文档的标题、作者和发布时间。

效果

比如讲,搜索博主“爱吃饼干的小白鼠”,我们看看网站反馈的数据是不是和我们一样的。

 

展示内容效果代码

接下来,我们就要把上面的内容展示到界面里面。

1

2

3

4

def show(search_list):

    # 往树状图中插入数据

    for index, li in enumerate(search_list):

        tree_view.insert('', index + 1,values=(li['num'], li['title'], li['author'], li['date'], li['link']))

这段代码定义了一个名为show的函数,该函数接受一个字符串列表参数search_list,该列表包含每个文档的标题、作者和发布时间,用于插入树状图中。

该函数首先使用一个循环来遍历search_list,并使用tree_view.insert()方法将每个文档插入到树状图中。tree_view.insert()方法接受一个参数,即要插入的节点的索引和值列表。values参数用于指定节点的值列表。

点击搜索功能代码

上面我们讲述了搜索功能代码,以及展示代码。接下来,我们就要实现这样的功能——我们在文本框输入“爱吃饼干的小白鼠”,然后,我们点击C一下,就会在界面显示内容。

(PS—如果大家感兴趣,可以实现一个回车的功能)

1

2

3

4

5

def click():

    key_word = search_va.get()

    if key_word:

        search_list = search(word=key_word)

        show(search_list)

这段代码定义了一个名为click的函数,该函数用于查找键盘上输入的字符串。如果找到了相应的字符串,则调用search()函数查找包含该字符串的文档并显示它们。get()方法用于从缓冲区中获取字符串。if key_word语句检查输入字符串是否包含在search_va中,如果是,则将search_list更新为包含相关文档的字符串列表。然后调用show()函数将其显示在树状图中。

效果

 

访问博客网页

我们接下来,就实现点击某一行就会访问该文章。

1

2

3

4

def tree_view_click():

    for item in tree_view.selection():

        item_text = tree_view.item(item, "values")

        webbrowser.open(item_text[-1])

这段代码定义了一个名为tree_view_click的函数,该函数用于在树状图中选择节点并打开相应的网页。它使用tree_view.selection()方法获取选中的节点,并使用tree_view.item()方法获取节点的文本值。然后,它使用webbrowser.open()方法打开相应的网页。

1

tree_view.bind("<Button-1>",tree_view_click)

在 Python 中,可以使用 tkinter 模块中的 ttk 子模块来创建树形视图控件。要为树形视图添加点击函数,可以使用 ttk.Treeview 的 __init__ 方法来设置点击事件处理函数。

到此这篇关于基于Python制作一个简单的文章搜索工具的文章就介绍到这了。

点击拿去
50G+学习视频教程
100+Python初阶、中阶、高阶电子书籍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/747791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R和python中dataframe读取方式总结

首先我有一个如图所示的文件 如果在python中读取 import pandas as pd df pd.read_csv("./6group_count.csv",index_col0) df而在R中读取的方式如下 df read.csv("./6group_count.csv",row.names 1)

springboot 集成Druid的监控数据库连接池的最佳实践

免费的chatgpt福利送上 http://124.220.104.235:31105/web/chatgpt 1.数据库连接池介绍 1.1JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时&#xff0c;传统的模式基本是按以下步骤 在主程序&#xff08;如servlet、beans&#xff09;中建立数据库连接 进行sql…

Mybatis-plus通用查询方法封装

定义DTO package com.lbdj.user.service.dto;import com.lbdj.toolkit.utils.ReturnField; import com.lbdj.toolkit.utils.SFunction; import lombok.Data;/*** 用户DTO** author 作者* since 2023-06-27*/ Data public class LbdjUserDTO {/*** 主键*/private Long id;priva…

Oracle表设计

设计原则 为了建立冗余较小、结构合理的数据库&#xff0c;设计数据库时必须遵循一定的规 则。在关系型数据库中这种规则就称为范式。 范式是符合某一种设计要求的总结。 要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。在实际开发中最为 常见的设计范式…

Auto.js 填充布局 layout_weight=“1“

当我在编写界面布局时&#xff0c;遇到了一个需求&#xff1a; 顶部和底部有按钮&#xff0c;而中间部分需要填满剩余空间且高度未知。 我通过使用layout_weight"1"完美解决我的问题&#xff0c;在这里记录一下。 "ui"; ui.layout(<vertical><te…

STM32——关于GPIO口的输出方式和输入方式

在STM32中&#xff0c;我们会要使用程序来对I/O口进行控制&#xff0c;当我们使用I/O口时&#xff0c;我们就需要知道在程序中我们需要这个I/O口来实现什么功能&#xff0c;是输入还是输出。 1、使用输出模式 I/O口常用的输出方式有推挽输出和开漏输出。 &#xff08;1&#…

回归预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实现WOA-CNN-GR…

驱动day5

驱动程序 #include <linux/init.h> #include <linux/module.h> #include<linux/fs.h> #include<linux/device.h> #include<linux/cdev.h> #include<linux/slab.h> #include<linux/uaccess.h> #include<linux/of.h> #include&…

11.4.2:DotImage SDK 基于web的扫描功能 cRACK

包含&#xff1a; DDotImage Document ImagingPDF Reader w/ Text ExtractionWingScan with eVRSOffice ReaderDotPDFBarcode Reading and WritingOCR Engines DotImage SDK WingScan 亮点&#xff0c;&#xff0c;WEB WingScan附带了一个简单的HTML5/JavaScript文档查看器…

Postgresql优化器如何使用列统计信息?

对pg_statistic表的查询都是走syscache的&#xff0c;要找到所有使用列统计信息地方&#xff0c;遍历系统表索引即可 enum SysCacheIdentifier {...STATEXTDATASTXOID,STATEXTNAMENSP,STATEXTOID,STATRELATTINH,... }下面是最常用的STATRELATTINH索引场景&#xff0c;即 Sear…

小奇猫物语之产品经理篇(2)

小奇猫物语之产品经理篇&#xff08;2&#xff09; 喵喵提示&#xff1a;小奇的产品经理篇&#xff08;2&#xff09;来咯&#xff0c;预告一下&#xff0c;前面几篇主要是讲产品经理的思维模式以及怎样去从一个学生思维转变成一个能带领一个项目的产品经理思维&#xff0c;所…

DolphinDB 与通联数据达成合作,构建快捷高效的一站式行情数据服务

在此前发布的多篇教程中&#xff0c;我们为大家展示了 DolphinDB 如何为因子投研、实时计算等业务场景加速&#xff0c;并进行了手把手教学&#xff0c;比如&#xff1a; 对接极速行情&#xff0c;真的很简单…… 又比如&#xff1a; 自己动手&#xff0c;搭一套行情回放系统…

Vue 路由跳转

文章目录 前言路由基础子路由路由传参query 传参 path静态传参动态传参 params 传参 name 编程式路由利用JS实现路由跳转 router 路由守卫 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; views里面放的是视图子组件&#xff08;首页、商家列表、商品列…

MySQL(九):MySQL语法-高级

MySQL语法-高级 LIMITLIKEASCREATE UNIQUE INDEX、DROP INDEXCREATE VIEW、DROP VIEWGROUP BYHAVINGMYSQL - JOININNER JOIN、JOINLEFT JOIN、LEFT OUTER JOINRIGHT JOIN、RIGHT OUTER JOINLEFT JOIN ... WHERE ...RIIGHT JOIN ... WHERE ... TRUNCATE TABLEINSERT INTO 表1 (列…

信创电子档案管理单机版系统之档案利用的功能介绍

专久智能信创电子档案管理单机版系统的档案利用&#xff0c;包括对电子档案的网上利用和对档案实体的借阅两种方式&#xff0c;用户对档案的利用都是通过 WEB 方式的档案网站实现的。 用户可以根据系统赋予的权限对电子档案目录进行检索查询&#xff0c;找到所需的档案目录&…

图像分类——图像增强方法

目录 常用的图像增强方法tf.image进行图像增强翻转和裁剪颜色变换 使用ImageDataGenerator(进行图像增强) 常用的图像增强方法 tf.image进行图像增强 离线实现 import tensorflow as tf import matplotlib.pyplot as plt import numpy as npcatplt.imread(./cat.jpg) plt.ims…

【后端面经-架构】RabbitMQ简介

【后端面经-架构】RabbitMQ简介 1. MQ介绍2. RabbitMQ2.1 简介2.2 架构&#xff1a;组件解释2.3 特点2.4 优缺点 面试模拟参考资料 1. MQ介绍 MQ&#xff08;Message Queue&#xff09;用于在应用程序之间相互通信&#xff0c;在消息中发送数据进行通信&#xff0c;而不需要特…

数据结构(王卓版)——算法分析

一个好算法如何衡量&#xff1a; 分析算法时间复杂度的方法&#xff1a; 复杂算法的计算规则&#xff1a; 空间复杂度

【深度学习】基于BRET的高级主题检测

一、说明 使用BERT&#xff0c;UMAP和HDBSCAN捕获文档主题&#xff0c;紧随最先进的BERTopic架构&#xff08;transformer编码器&#xff09;。 主题检测是一项 NLP 任务&#xff0c;旨在从文本文档语料库中提取全局“主题”。例如&#xff0c;如果正在查看书籍描述的数据集&am…

fatal: unable to access ‘http://xxxx‘: Empty reply from server

当你遇到 “fatal: unable to access ‘http://xxxx’: Empty reply from server” 的错误信息时&#xff0c;通常表示 Git 客户端无法连接到指定的服务器或仓库。 以下是一些可能导致该错误的原因以及一些排除故障的步骤&#xff1a; 错误的 URL&#xff1a;确保你提供的 URL…