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_())
目录
相关文章
|
1月前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
9天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
10天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
19天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
24天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
1月前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
2月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href=&#39;example.com&#39;]` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
121 6
|
2月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
100 4
|
5月前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
265 6