基于Python制作一个简单的文章搜索工具
作者:极客飞虎 发布时间:2021-07-08 02:16:28
前言
今天,我无聊的时候做了一个搜索文章的软件,有没有更加的方便快捷不知道,好玩就行了。基于Python tkinter 制作文章搜索软件,都是一些基础的应用。
功能实现
导入模块
代码
我们首先做到第一件事是导入模块。
import tkinter as tk
import webbrowser
from tkinter import ttk
import requests
创建窗口
代码
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)
效果
背景图片
代码
img = tk.PhotoImage(file='benjing.png')
tk.Label(root, image=img).pack()
这行代码创建了一个名为img
的PhotoImage对象,并将其设置为根窗口对象root
的图像。然后,它使用tk.Label
创建一个标签对象,并将图像设置为该标签的图像。最后,它使用pack()
方法将标签对象放置在根窗口对象中。
效果
搜索文本框
代码
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
。
效果
内容显示界面
代码
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对象,并将根节点设置为root
。show
参数设置为"headings"
,表示显示节点的标题。columns
参数设置为一个包含节点标题、作者、发布时间和链接的列表。tree_view.column()
方法用于设置每个列的宽度和锚点。tree_view.column()
方法接受一个参数,即要设置宽度和锚点的列的名称。tree_view.heading()
方法用于设置每个列的标题。tree_view.pack()
方法用于设置节点的位置和大小,并将节点放置在根窗口对象中。tree_view.fill
参数设置为"both"
,表示填充整个窗口,expand
参数设置为True
,表示展开节点,pady
参数设置为10,表示节点之间的间距。
效果
搜索内容效果代码
到了这里,我们这个框架就写好了,那么,我们如何获取搜索功能呢。、
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
,该列表包含符合给定字符串的所有文档的标题、作者和发布时间。
效果
比如讲,搜索博主“爱吃饼干的小白鼠”,我们看看网站反馈的数据是不是和我们一样的。
展示内容效果代码
接下来,我们就要把上面的内容展示到界面里面。
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—如果大家感兴趣,可以实现一个回车的功能)
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()
函数将其显示在树状图中。
效果
访问博客网页
我们接下来,就实现点击某一行就会访问该文章。
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()
方法打开相应的网页。
tree_view.bind("<Button-1>",tree_view_click)
在 Python 中,可以使用 tkinter
模块中的 ttk
子模块来创建树形视图控件。要为树形视图添加点击函数,可以使用 ttk.Treeview
的 __init__
方法来设置点击事件处理函数。
来源:https://juejin.cn/post/7231152541404233789


猜你喜欢
- 完美解决vue中报错 “TypeError: Cannot read properties of null (reading &ls
- 项目环境:python3.6,django2.1接口功能: 将传入参数a和b字符串相加,返回结果1.新建一个django项目# 新建一个名为
- 一直以来都对DOMDocument与 XMLHTTP 两者的区别不甚了解,今天用 eXeScope 查看了msxml6.dll 内
- 本文实例讲述了PHP面向对象程序设计类的定义与用法。分享给大家供大家参考,具体如下:<?phpclass Person {  
- 下载opencv2.4.9(python2.7匹配)后 (1)运行OpenCV 2.4.9.exe;(2)配置Python:将\opencv
- 深入作用域链与闭包为什么要把作用域链和闭包放在一起讲呢,它们有什么关联吗?试想,我们如果在一个内部的函数使用了外部的变量,是通过[[oute
- 前言本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch。为了避免文章过长,这五个模块分别在五篇博文中介绍。Part3:使
- 引言在上一篇文章中 GoFrame数据校验之校验结果 | Error接口对象 ,关于顺序与非顺序性校验没有做充分的介绍。这篇文章填上之前留的
- 一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存。如果是个巨大的文件,则可能内存会爆掉;且,有
- 近几年来,nosql大行其道,json更是火的一塌糊涂,作为数据库的元老,mysql在5.7版本中添加了对json数据的支持。这片博客主要介
- 案例:该数据集的是一个关于每个学生成绩的数据集,接下来我们对该数据集进行分析,判断学生是否适合继续深造数据集特征展示1 GRE
- 前言使用python做一个加密资料的软件,可加密应用程序、文件、压缩包等多种文件格式,不可直接加密文件夹,可以先用压缩包打包在加密。加密后的
- 申明:资料来源于网络及书本,通过理解、实践、整理成学习笔记。Pythion的Selenium自动化测试之获取哔哩哔哩主播的头像以昵称命名保存
- 我相信绝大多数小伙伴在自学python时,运用pycharm进行编写程序时发现字体太小不方便进行编写,通常像codeblocks
- 前言因为一些懂得都懂的原因,我的父母对于我电脑上的文件内容特别感兴趣。为了防止信息泄露,我连夜用Python做了一个文件加密器,防止我的重要
- 修改密码://选择数据库use mysql;//修改密码update user set password=password('新密码
- 针对与mssql2005的安全,应当针对于2个方面来做,针对于主要的权限及端口。(要是有人说删除不安全的系统存储过程,先说好这个方式只能针对
- 前言:作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队、CBA明星、花边新闻、球鞋美
- 列表UL或是OL中都有一个预设标记,这个标记可能是实点圆点,也可能是数字。在实际的应用中,我们需要去掉这个预设标记,但我们不清楚这个预设标记
- 可以使用python中的sys模块的getrefcount()方法来获取对象引用的个数。具体可以看以下的实例:import sys # 首先