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

简介:   在上一篇分享中,笔者已经介绍了如何利用Python爬虫来制作一个简单的搜索引擎。我们将继续这个工作,来建立一个该搜索引擎的GUI版本,来获得更好地搜索体验。

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

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,得到该词条的百度百科的简介部分的文字。

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

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

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界面,便于用户操作。如有不足之处,还请批评指正~~
  附上全部源程序: 

# -*- 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_())
目录
相关文章
|
23天前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
2月前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
1月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
2月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
632 19
|
29天前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
1月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
2月前
|
数据采集 存储 Web App开发
处理Cookie和Session:让Python爬虫保持连贯的"身份"
处理Cookie和Session:让Python爬虫保持连贯的"身份"
|
2月前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略
|
2月前
|
数据采集 网络协议 API
协程+连接池:高并发Python爬虫的底层优化逻辑
协程+连接池:高并发Python爬虫的底层优化逻辑
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。

推荐镜像

更多