Python爬虫——自制简单搜索引擎GUI版

news/2024/7/19 12:44:12 标签: 爬虫, python, c/c++

  在上一篇分享中,笔者已经介绍了如何利用Python爬虫来制作一个简单的搜索引擎。我们将继续这个工作,来建立一个该搜索引擎的GUI版本,来获得更好地搜索体验。
  主要程序还是上一篇分享中的搜索程序,在此基础上加入UI设计,得到图形化操作界面。
  直接上程序!

python">def introduction(self,citiao): # 詞條的百度百科簡介部分函數
        url =  'https://baike.baidu.com/item/'+urllib.parse.quote(citiao)
        # 讀取網頁
        html = urllib.request.urlopen(url)  
        content = html.read().decode('utf-8')
        html.close()
        #網頁解析
        soup = BeautifulSoup(content, "lxml")  
        text = soup.find('div', class_="lemma-summary").children #簡介部分
        intro_text=''
        #文本處理,主要利用正則表達式
        for x in text:
            word = re.sub(re.compile(r"<(.+?)>"),'',str(x))
            words = re.sub(re.compile(r"\[(.+?)\]"),'',word)
            intro_text += words

        return intro_text # 返回文本(str格式)

  该段代码与上一篇分享类似,就不在具体讲述,主要功能为:输入参数为citiao,得到该词条的百度百科的简介部分的文字。

python">def intro_final(self,citiao): # 異常處理函數
        try:
            return self.introduction(citiao)
        except AttributeError:
            return "请再输入详细点,亲~~"   

  intro_final()为异常处理函数,如果introduction()函数没有搜索到结果,则提示输入详细点,因为某个词条可能存在多义词。

python">def initUI(self):
        #GUI布局及控件放置
        search_label = QLabel("请输入搜索词条:")
        search_item = QLineEdit()
        btn1 = QPushButton("开始搜索", self)
        btn2 = QPushButton("清空", self)
        search_result = QTextEdit()
        grid = QGridLayout()
        grid.setSpacing(5)
        grid.addWidget(search_label, 1, 0)
        grid.addWidget(search_item,2, 0)
        grid.addWidget(btn1, 3, 0)
        grid.addWidget(btn2, 3, 1)
        grid.addWidget(search_result, 4, 0, 5, 0)
        self.setLayout(grid)

        #爲兩個按鈕關聯處理函數,當按下“開始搜索”按鈕開始開搜並輸出,當按下“清空”清空內容
        def searching():
            search_result.setText(self.intro_final(search_item.text()))
        btn1.clicked.connect(searching)

        def clear():
            search_result.setText("")
            search_item.setText("")
        btn2.clicked.connect(clear)

        #設置窗口
        self.setGeometry(400, 150, 600, 500)
        self.setWindowTitle("搜索引擎GUI")

  该段代码主要是利用PyQt5模块来设计GUI界面,图形化界面如下:
  搜索GUI
  接下来是欢乐的测试时间~~
  搜索GUI1
  搜索GUI2
  搜索GUI3
  搜索GUI4



  本次分享主要是上一次分享的优化,得到GUI界面,便于用户操作。如有不足之处,还请批评指正~~
  附上全部源程序: 

python"># -*- coding: utf-8 -*-
import sys
import re
import bs4
import urllib.request  
from bs4 import BeautifulSoup 
import urllib.parse
from PyQt5.QtWidgets import (QPushButton,QWidget, QLabel, QLineEdit, QTextEdit, QGridLayout,QApplication)

class Example(QWidget): 
    def __init__(self): # 初始化
        super().__init__()
        self.initUI()

    def introduction(self,citiao): # 詞條的百度百科簡介部分函數
        url = 'https://baike.baidu.com/item/'+urllib.parse.quote(citiao)
        # 讀取網頁
        html = urllib.request.urlopen(url)  
        content = html.read().decode('utf-8')
        html.close()
        #網頁解析
        soup = BeautifulSoup(content, "lxml")  
        text = soup.find('div', class_="lemma-summary").children #簡介部分
        intro_text=''
        #文本處理,主要利用正則表達式
        for x in text:
            word = re.sub(re.compile(r"<(.+?)>"),'',str(x))
            words = re.sub(re.compile(r"\[(.+?)\]"),'',word)
            intro_text += words

        return intro_text # 返回文本(str格式)

    def intro_final(self,citiao): # 異常處理函數
        try:
            return self.introduction(citiao)
        except AttributeError:
            return "请再输入详细点,亲~~"

    def initUI(self):
        #GUI布局及控件放置
        search_label = QLabel("请输入搜索词条:")
        search_item = QLineEdit()
        btn1 = QPushButton("开始搜索", self)
        btn2 = QPushButton("清空", self)
        search_result = QTextEdit()
        grid = QGridLayout()
        grid.setSpacing(5)
        grid.addWidget(search_label, 1, 0)
        grid.addWidget(search_item,2, 0)
        grid.addWidget(btn1, 3, 0)
        grid.addWidget(btn2, 3, 1)
        grid.addWidget(search_result, 4, 0, 5, 0)
        self.setLayout(grid)

        #爲兩個按鈕關聯處理函數,當按下“開始搜索”按鈕開始開搜並輸出,當按下“清空”清空內容
        def searching():
            search_result.setText(self.intro_final(search_item.text()))
        btn1.clicked.connect(searching)

        def clear():
            search_result.setText("")
            search_item.setText("")
        btn2.clicked.connect(clear)

        #設置窗口
        self.setGeometry(400, 150, 600, 500)
        self.setWindowTitle("搜索引擎GUI")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

http://www.niftyadmin.cn/n/841478.html

相关文章

Unity3D 修改动画,资源文件设置

导出到项目中的动画文件&#xff0c;或者其他类型的资源文件&#xff08;图片&#xff0c;音频...&#xff09;&#xff0c;通常是需要在面板中修改一下设置的。少量修改可以手动处理&#xff0c;当需要批量修改设置时&#xff0c;就会想到做个工具批量修改。 之前做过批量修改…

软中断

软中断软中断softirqsoftirq简介提出softirq的机制的目的和老版本的底半部分的目的是一致的&#xff0c;都是将某个中断处理的一部分任务延迟到后面去执行。 Linux内核中一共可以有32个softirq,每个softirq实际上就是指向一个函数。当内核执行softirq(do_softirq),就对这32个so…

bash计时器的实现案例:检查并记录网络稳定性的脚本

bash的帮助中提到SECONDS系统变量&#xff1a; SECONDS Each time this parameter is referenced, the number of seconds since shell invocation is returned. If a value is assigned to SECONDS, the value returned upon subsequent references is the number of second…

吃货联盟项目

public class ddddd {String []name new String[4];//保存订单人姓名String []dishMegs new String[4];//保存所选信息,包括菜品名及份数String []time new String[4];//保存送餐时间String[]address new String[4];//保存送餐地址int[]states new int[4];//保存订单状态:0表预…

如何让win7系统发声 win7系统讲述人功能

如何让win7系统发声 win7系统讲述人功能 win7系统之所以受到那么多用户的喜欢&#xff0c;除了它的唯美界面之外&#xff0c;更多的还是它在功能上得到的升华&#xff0c;今天win7之家小编要讲述的就是win7系统中设置的一款“讲述人”的功能&#xff0c;让win7系统自动发声! 首…

android adb端口被占用解决方法

1.输入adb devices命令 C:\Users\Nick>adb devicesList of devices attachedadb server version (31) doesnt match this client (39); killing... error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常每个套接字地址(协议/网络地址/端口…

关于Solaris 11发布而引发的一些回忆

初次接触Solaris是在08年,当时sun公司还健在.当时sun在各个大学里面搞open活动,印象中当时成立了个open developer 组织,有专门的网站,用来做宣传.宿舍里面的一个同学参加sun在学校里面搞的某次活动拿到了一些纪念品和一张光盘.光盘上就是opensolaris,上面带了sun studio和netb…

eclipse 反编译插件 jdeclipse【常用简便易用】

反编译插件安装方法&#xff1a; http://blog.csdn.net/partner4java/article/details/8198747 按照方式一安装即可。