利用PyQt5制作一个豆瓣电影信息查看器

制作一个查看器可以查看豆瓣前100名电影的信息,当然这个爬取信息比较简单。所以重点放在 QThread 多线程的应用上面。

QThread 子线程是 PyQt5 自带的一个线程使用,因为如果使用 PyQt5 的主线程去做所有的事情。如果处理速度太慢的情况下主线程就会直接出现卡死状态。

网络信息提取的相关模块有下面这些,主要是一个获取 Html 信息,另一个解析 Html5 的页面信息。

import requests  # 网络请求库
from bs4 import BeautifulSoup  # H5页面元素解析库
from fake_useragent import UserAgent  # 身份信息生成库

UI 界面布局相关的模块。

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

应用操作相关的模块。

import sys

先把专门用于信息爬取的独立线程写好。新建一个线程类继承自 QThread,其中最重要的是要写上 initdel、run这几个函数。这几个函数对线程类 QThread 里面的函数重写的,业务逻辑是通过 run 函数实现的。

'''
独立线程处理信息爬取
'''
class DouBanWorker(QThread):
    trigger = pyqtSignal(str)
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(DouBanWorker, self).__init__(parent)
        self.parent = parent
        self.url = 'https://movie.douban.com/top250?start={}&filter='
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        # 构造useragent身份设备信息
        headers = {
            "User-Agent": str(UserAgent().random),
        }
        for page in range(4):
            url = self.url.format(page * 25)
            response = requests.get(url, headers=headers)
            bs = BeautifulSoup(response.text, 'html.parser')
            movie_list = bs.find_all('div', class_='item')
            for movie in movie_list:
                movie_seq = movie.find('em').text
                movie_name = movie.find('span').text
                movie_score = movie.find("span", class_='rating_num').text
                movie_inst = movie.find("span", class_='inq').text
                movie_link = movie.find('a')['href']
                self.trigger.emit('\n')
                self.trigger.emit('排名:' + movie_seq + '\n')
                self.trigger.emit('名称:' + movie_name + '\n')
                self.trigger.emit('评分:' + movie_score + '\n')
                self.trigger.emit('描述:' + movie_inst + '\n')
                movie_link = "<font color='blue'>" + movie_link + "</font>"
                self.trigger.emit('链接:' + movie_link + '\n')
        self.finished.emit(True)

主界面的 UI 布局信息比较简单,主要是一个文本浏览器和一个开始的按钮组成的。

def init_ui(self):
        '''
        初始化UI界面布局
        :return:
        '''
        self.setWindowTitle('豆瓣电影排名')
        self.setWindowIcon(QIcon('电影.ico'))
        self.resize(400, 300)

        vbox = QVBoxLayout()

        self.result_brower = QTextBrowser()
        self.result_brower.setFont(QFont('宋体', 8))
        self.result_brower.setReadOnly(True)
        self.result_brower.setPlaceholderText('信息展示区域')
        self.result_brower.ensureCursorVisible()

        vbox.addWidget(self.result_brower)

        self.thread_ = DouBanWorker(self)
        self.thread_.trigger.connect(self.update_log)
        self.thread_.finished.connect(self.finished)

        self.start_btn = QPushButton()
        self.start_btn.setText('获取前100名豆瓣电影详细信息')
        self.start_btn.clicked.connect(self.start_btn_click)

        vbox.addWidget(self.start_btn)

        self.setLayout(vbox)

文本浏览器内容保持追加更新的槽函数,将电影信息获取的实施进度追加到页面上可以看到。

 def update_log(self, text):
        '''
        槽函数:向文本浏览器中写入内容
        :param text:
        :return:
        '''
        cursor = self.result_brower.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.result_brower.append(text)
        self.result_brower.setTextCursor(cursor)
        self.result_brower.ensureCursorVisible()

开始按钮上关联的槽函数,用这个函数在收到主线程的开始命令时来启动子线程的运行,子线程就会自动去爬取豆瓣上面的排名信息。

def start_btn_click(self):
        '''
        槽函数:启动子线程爬取豆瓣电影信息
        :return:
        '''
        self.start_btn.setEnabled(False)
        self.thread_.start()

在收到子线程执行完成的信息时,将开始按钮完成可用的状态可以点击再次执行。

  def finished(self, finished):
        '''
        槽函数:处理完成时将开始按钮变成可点击状态
        :param finished:
        :return:
        '''
        if finished is True:
            self.start_btn.setEnabled(True)

完成后,启动后台入口函数,最后看一下入口函数的写法和往常是一样的。

if __name__ == '__main__':
    '''
    主函数入口
    '''
    app = QApplication(sys.argv)
    main = DouBanUI()
    main.show()
    sys.exit(app.exec_())

到此这篇关于利用PyQt5制作一个豆瓣电影信息查看器的文章就介绍到这了,更多相关PyQt5电影信息查看器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python爬虫实现热门电影信息采集

    目录 一.前言 二.前期准备 1.使用的软件 2.需要用的模块 3.模块安装问题 4.如何配置pycharm里面的python解释器? 5.pycharm如何安装插件? 三.思路 1.明确需求 2.发送请求 3.获取数据 4.解析数据 5.保存数据 四.代码部分  一.前言 好不容易女神喊我去看电影,但是她又不知道看啥,那么我当然得准备准备~ 二.前期准备 1.使用的软件 python 3.8 开源 免费的 (统一 3.8) Pycharm YYDS python最好用的编辑器 不接受反驳- 2

  • Python 通过xpath属性爬取豆瓣热映的电影信息

    目录 前言 页面分析 实现过程 创建项目 Item定义 中间件操作定义 爬虫定义 数据管道定义 配置设置 执行验证 总结 前言 声明一下:本文主要是研究使用,没有别的用途. GitHub仓库地址:github项目仓库 页面分析 主要爬取页面为:https://movie.douban.com/cinema/nowplaying/nanjing/ 至于后面的地区,可以按照自己的需要改一下,不过多赘述了.页面需要点击一下展开全部影片,才能显示全部内容,不然只有15部.所以我们使用selenium的时

  • Python猫眼电影最近上映的电影票房信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 基本环境配置 python 3.6 pycharm requests csv 相关模块pip安装即可 目标网站 数据接口 请求网页获取数据 import requests url = 'http://piaofang.maoyan.com/dashboard-ajax/movie' params = { } cookie

  • 用python爬取豆瓣前一百电影

    目录 实现代码: 代码分析: 运行结果: 总结 网站爬取的流程图: 实现项目我们需要运用以下几个知识点 一.获取网页1.找网页规律:2.使用 for 循环语句获得网站前4页的网页链接:3.使用 Network 选项卡查找Headers信息:4.使用 requests.get() 函数带着 Headers 请求网页. 二.解析网页1.使用 BeautifulSoup 解析网页:2.使用 BeautifulSoup 对象调用 find_all() 方法定位包含单部电影全部信息的标签:3.使用 Tag

  • Python趣味爬虫之爬取爱奇艺热门电影

    一.首先我们要找到目标 找到目标先分析一下网页很幸运这个只有一个网页,不需要翻页. 二.F12查看网页源代码 找到目标,分析如何获取需要的数据.找到href与电影名称 三.进行代码实现,获取想要资源. ''' 操作步骤 1,获取到url内容 2,css选择其选择内容 3,保存自己需要数据 ''' #导入爬虫需要的包 import requests from bs4 import BeautifulSoup #requests与BeautifulSoup用来解析网页的 import time #设

  • 利用PyQt5制作一个豆瓣电影信息查看器

    制作一个查看器可以查看豆瓣前100名电影的信息,当然这个爬取信息比较简单.所以重点放在 QThread 多线程的应用上面. QThread 子线程是 PyQt5 自带的一个线程使用,因为如果使用 PyQt5 的主线程去做所有的事情.如果处理速度太慢的情况下主线程就会直接出现卡死状态. 网络信息提取的相关模块有下面这些,主要是一个获取 Html 信息,另一个解析 Html5 的页面信息. import requests # 网络请求库 from bs4 import BeautifulSoup #

  • Python利用PyQt5制作一个获取网络实时NBA数据并播报的GUI程序

    制作NBA数据爬虫 捋顺思路 我们在这里选择的是百度体育带来的数据,我们在百度当中直接搜索NBA跳转到网页,我们可以看到,百度已经为我们提供了相关的数据 我们点击进去后,可以发现这是一个非常简洁的网址 我们看一下这个地址栏,发现毫无规律https://tiyu.baidu.com/live/detail/576O5Zu955S35a2Q6IGM5Lia56%2Bu55CD6IGU6LWbI2Jhc2tldGJhbGwjMjAyMS0wNi0xMyPniLXlo6t2c%2BWspritq%2Bi

  • Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI功能

    制作NBA数据爬虫 捋顺思路 我们在这里选择的是百度体育带来的数据,我们在百度当中直接搜索NBA跳转到网页,我们可以看到,百度已经为我们提供了相关的数据 我们点击进去后,可以发现这是一个非常简洁的网址 我们看一下这个地址栏,发现毫无规律https://tiyu.baidu.com/live/detail/576O5Zu955S35a2Q6IGM5Lia56%2Bu55CD6IGU6LWbI2Jhc2tldGJhbGwjMjAyMS0wNi0xMyPniLXlo6t2c%2BWspritq%2Bi

  • 如何利用PyQt5制作一个简单的登录界面

    目录 环境配置 额外工具配置 生成UI界面 总结 环境配置 新建python虚拟环境并激活 conda create -n pyqt python=3.8 conda activate py36 安装pyqt5 pip install pyqt5 安装pyqt5-tools pip install pyqt5-tools 在PyCharm中新建一个qtdemo工程,并使用这个新建的python虚拟环境作为工程环境 额外工具配置 依次点击File---Settings---Tools---Exte

  • 利用Python制作一个MOOC公开课下载器

    目录 导语 开发工具 环境搭建 先睹为快 原理简介 导语 记得很久以前写过一些中国大学MOOC上的视频下载器,不过好像都已经年久失修了.正好最近有需要,所以重新写了一个,顺便上来分享一波,寒假大家也可以用它来下载点课程内卷一下: 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.7.8 相关模块: DecryptLogin模块: tqdm模块: click模块: argparse模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的

  • 利用java制作一个小的目录查询器的方法

    实例如下: import java.util.*; import javax.swing.*; import java.awt.*; import java.io.*; import java.awt.event.*; class MyWindow{ private Frame f1; private Button bt1; private TextField tx1; private TextArea tx2; MyWindow(){ init(); } public void init(){

  • Python+PyQt5制作一个图片查看器

    目录 前言 实现方式 测试 前言 在 PyQt 中可以使用很多方式实现照片查看器,最朴素的做法就是重写 QWidget 的 paintEvent().mouseMoveEvent 等事件,但是如果要在图像上多添加一些形状,那么在对图像进行缩放旋转等仿射变换时需要对这些形状也这些变换,虽然不难,但是从头实现这些变换还有形状还是挺讨厌的.好在 Qt 提供了图形视图框架,关于这个框架的基本使用可以参见 深入了解PyQt5中的图形视图框架,下面进入正题. 实现方式 一个最基本的照片查看器应该具有以下功能

  • Python爬虫实现的根据分类爬取豆瓣电影信息功能示例

    本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口: if __name__ == '__main__': main() #! /usr/bin/python3 # -*- coding:utf-8 -*- # author:Sirius.Zhao import json from urllib.parse import quote from urllib.request import urlopen from urllib.reque

  • Python实现的爬取豆瓣电影信息功能案例

    本文实例讲述了Python实现的爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 本案例的任务为,爬取豆瓣电影top250的电影信息(包括序号.电影名称.导演和主演.评分以及经典台词),并将信息作为字典形式保存进txt文件.这里只用到requests库,没有用到beautifulsoup库 step1:首先获取每一页的源代码,用requests.get函数获取,为了防止请求错误,使用try...except.. def getpage(url): try: res=requests.get

  • 基于PyQT5制作一个敏感词检测工具

    设计思路:根据敏感词库文件筛选,查看输入的文本中是否包含敏感词汇.从而过滤出相关的敏感词. 导入应用相关的模块. import os import logging import sys 导入UI界面相关的模块. from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QTextEdit,QGridLayout,QLineEdit,QPushButton,QFileDialog from PyQt5.QtGui import QIc

随机推荐