制作一个查看器可以查看豆瓣前100名电影的信息,当然这个爬取信息比较简单。所以重点放在 qthread 多线程的应用上面。
qthread 子线程是 pyqt5 自带的一个线程使用,因为如果使用 pyqt5 的主线程去做所有的事情。如果处理速度太慢的情况下主线程就会直接出现卡死状态。
网络信息提取的相关模块有下面这些,主要是一个获取 html 信息,另一个解析 html5 的页面信息。
import requests # 网络请求库from bs4 import beautifulsoup # h5页面元素解析库from fake_uragent import uragent # 身份信息生成库
ui 界面布局相关的模块。
from pyqt5.qtwidgets import *from pyqt5.qtgui import *from pyqt5.qtcore import *
应用操作相关的模块。
import sys
先把专门用于信息爬取的独立线程写好。新建一个线程类继承自 qthread,其中最重要的是要写上init、del、run这几个函数。这几个函数对线程类 qthread 里面的函数重写的,业务逻辑是通过 run 函数实现的。
'''独立线程处理信息爬取'''class doubanworker(qthread): trigger = pyqtsignal(str) finished = pyqtsignal(bool) def __init__(lf, parent=none): super(doubanworker, lf).__init__(parent) 辄在文言文中的意思 lf.parent = parent lf.url = '/d/file/titlepic/top250' lf.working = true def __del__(lf): lf.working = fal lf.wait() def run(lf): # 构造uragent身份设备信息 headers = { "ur-agent": str(uragent().random), } for page in range(4): url = lf.url.format(page * 25) respon = reques清蒸大闸蟹螃蟹的做法和步骤ts.get(url, headers=headers) bs = beautifulsoup(respon.text, 'html.parr') movie_list = bs.find_all('div', class_='item') for movie in movie_list: movie_q = 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'] lf.trigger.emit('\n') lf.trigger.emit('排名:' + movie_q + '\n') lf.trigger.emit('名称:' + movie_name + '\n') lf.trigger.emit('评分:' + movie_score + '\n') lf.trigger.emit('描述:' + movie_inst + '\n') movie_link = "<font color='blue'>" + movie_link + "</font>" lf.trigger.emit('链接:' + movie_link + '\n') lf.finished.emit(true)
主界面的 ui 布局信息比较简单,主要是一个文本浏览器和一个开始的按钮组成的。
def init_ui(lf): ''' 初始化ui界面布局 :return: ''win7音量图标不见了' lf.twindowtitle('豆瓣电影排名') lf.twindowicon(qicon('电影.ico')) lf.resize(400, 300) vbox = qvboxlayout() lf.result_brower = qtextbrowr() lf.result_brower.tfont(qfont('宋体', 8)) lf.result_brower.treadonly(true) lf.result_brower.tplaceholdertext('信息展示区域') lf.result_bro重来 黄小琥wer.ensurecursorvisible() vbox.addwidget(lf.result_brower) lf.thread_ = doubanworker(lf) lf.thread_.trigger.connect(lf.update_log) lf.thread_.finished.connect(lf.finished) lf.start_btn = qpushbutton() lf.start_btn.ttext('获取前100名豆瓣电影详细信息') lf.start_btn.clicked.connect(lf.start_btn_click) vbox.addwidget(lf.start_btn) lf.tlayout(vbox)
文本浏览器内容保持追加更新的槽函数,将电影信息获取的实施进度追加到页面上可以看到。
def update_log(lf, text): ''' 槽函数:向文本浏览器中写入内容 :param text: :return: ''' cursor = lf.result_brower.textcursor() cursor.moveposition(qtextcursor.end) lf.result_brower.append(text) lf.result_brower.ttextcursor(cursor) lf.result_brower.ensurecursorvisible()
开始按钮上关联的槽函数,用这个函数在收到主线程的开始命令时来启动子线程的运行,子线程就会自动去爬取豆瓣上面的排名信息。
def start_btn_click(lf): ''' 槽函数:启动子线程爬取豆瓣电影信息 :return: ''' lf.start_btn.tenabled(fal) lf.thread_.start()
在收到子线程执行完成的信息时,将开始按钮完成可用的状态可以点击再次执行。
def finished(lf, finished): ''' 槽函数:处理完成时将开始按钮变成可点击状态 :param finished: :return: ''' if finished is true: lf.start_btn.tenabled(true)
完成后,启动后台入口函数,最后看一下入口函数的写法和往常是一样的。
if __name__ == '__main__': ''' 主函数入口 ''' app = qapplication(sys.argv) main = doubanui() main.show() sys.exit(app.exec_())
到此这篇关于利用pyqt5制作一个豆瓣电影信息查看器的文章就介绍到这了,更多相关pyqt5电影信息查看器内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 16:17:37,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b338e3b701709678ebc5e1e47e8eba67.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:利用PyQt5制作一个豆瓣电影信息查看器.doc
本文 PDF 下载地址:利用PyQt5制作一个豆瓣电影信息查看器.pdf
留言与评论(共有 0 条评论) |