主頁 >  其他 > 畢業設計之 - 題目:基于大資料的電影資料分析可視化系統

畢業設計之 - 題目:基于大資料的電影資料分析可視化系統

2021-10-20 08:00:54 其他

文章目錄

  • 1 前言
  • 2 專案介紹
  • 3 效果展示
  • 4 專案分析
    • 4.1 爬蟲部分
    • 4.2 資料分析部分
  • 5 最后-畢設幫助

1 前言

Hi,大家好,這里是丹成學長,今天做一個電商銷售預測分析,這只是一個demo,嘗試對電影資料進行分析,并可視化系統

畢設幫助,開題指導,技術解答
🇶746876041

2 專案介紹

首先通過網頁開發者工具分析豆瓣電影網站,然后使用抓包工具攔截資料,從中找出api介面,接下來使用Python爬蟲進行資料的下載,資料下載完后,使用pandas模塊處理csv電影資料檔案,之后可以選用各種資料分析的方法對資料進行挖掘,包括但不限于關鍵詞提煉、詞頻統計、相關性探索、電影分類,再通過matplotlib繪制資料統計圖如條形圖、餅狀圖,亦或是wordCloud繪制評論詞云,

3 效果展示

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

4 專案分析

4.1 爬蟲部分

豆瓣電影官網雖然沒有令人窒息的反爬操作,但是介面較為隱蔽,需要通過Fiddler抓包工具輔助,才能找到電影資料介面,

撰寫爬蟲時使用xpath對網頁資料進行提取,使用正則運算式過濾冗余文本資料并對文本進行清洗,爬蟲運行程序中要控制爬取速度,否則在運行時不會出現爬取問題,但經過一段時間后豆瓣官網檢測到本臺主機IP的不正常請求,就會對IP進行封鎖,阻止下一次大規模爬取,

通過登錄豆瓣賬號獲得Cookie可以級訓這一點,并且可以訪問到更多的資料量,不過并不能保證不會被封號,最后將爬取資料保存為csv檔案,方便后期使用pandas等做資料處理,


## 非完整代碼,畢業設計找丹成學長,q746876041

import csv
import pymysql
import requests
import re
from lxml import html
import time

# 請求頭
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}

# 讀取電影url
urls = []
with open('./豆瓣電影TOP250鏈接.csv', 'r') as f:
    reader = csv.reader(f)
    urls = [row[0] for row in reader]

for i in range(0, len(urls)):
    url = urls[i]
    # 請求頁面
    r = requests.get(url=url, headers=headers, timeout=5)
    time.sleep(2)
    etree = html.etree
    selector = etree.HTML(r.text)

    # 獲取電影名稱
    filmname = []
    try:
        filmname = selector.xpath('//*[@id="content"]/h1/span[1]/text()')[0]  # 電影名
        if filmname == "":
            filmname = None
    except Exception as e:
        filmname = None
    print("filmname :{}".format(filmname))

    # 獲取電影評分
    score = []
    try:
        score_list = selector.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')
        score = score_list[0].replace("\t", "").replace("\n", "")
        if score == "":
            score = None
    except Exception as e:
        score = None
    print("score :{}".format(score))

    # 獲取電影上映時間
    showtime = []
    try:
        st = selector.xpath('//*[@id="content"]/h1/span[2]/text()')[0]  # 上映日期
        showtime = st.replace("(", "").replace(")", "")
        if showtime == "":
            showtime = None
    except Exception as e:
        showtime = None
    print("time :{}".format(showtime))

    # 獲取電影片長
    mins = []
    try:
        mins_list = re.findall('片長:</span>.*?>(.*?)</span>', r.text, re.S)  # 片長
        mins = mins_list[0].replace(' ', '').replace('分鐘', '')
        if mins == "":
            mins = None
    except Exception as e:
        mins = None
    print("mins :{}".format(mins))

    # 獲取電影型別
    genres_list = []
    try:
        genres_list = re.findall('<span property="v:genre">(.*?)</span>', r.text, re.S)
        genres_list = '/'.join(genres_list)
        if genres_list == "":
            genres_list = None
    except Exception as e:
        genres_list = None
    print("genres_list :{}".format(genres_list))

    # 獲取電影制片地區
    area_list = []
    try:
        area_list = re.findall('<span class="pl">制片國家/地區:</span> (.*?)<br/>', r.text, re.S)
        area_list = '/'.join(area_list).replace(' ', '')
        if area_list == "":
            area_list = None
    except Exception as e:
        area_list = None
    print("area_list :{}".format(area_list))

    # 獲取電影導演
    directors_list = []
    try:
        d_list = selector.xpath('//div[@id="info"]/span[1]/span[2]/a/text()')  # 導演
        if len(d_list) > 2:
            for i in range(0, 3):
                directors_list.append(d_list[i])
        else:
            for j in range(0, len(d_list)):
                directors_list.append(d_list[j])
        directors_list = '/'.join(directors_list)
        if directors_list == "":
            directors_list = None
    except Exception as e:
        directors_list = None
    print("directors_list :{}".format(directors_list))

    # 獲取電影編劇
    scriptwriters_list = []
    try:
        w_list = selector.xpath('//*[@id="info"]/span[2]/span[2]/a/text()')  # 編劇
        if len(w_list) > 2:
            for i in range(0, 3):
                scriptwriters_list.append(w_list[i])
        else:
            for j in range(0, len(w_list)):
                scriptwriters_list.append(w_list[j])
        scriptwriters_list = '/'.join(scriptwriters_list)
        if scriptwriters_list == "":
            scriptwriters_list = None
    except Exception as e:
        scriptwriters_list = None
    print('scriptwriters_list :{}'.format(scriptwriters_list))

    # 獲取電影主演
    actors_list = []
    try:
        actors = selector.xpath('//*[@id="info"]/span[3]/span[2]')[0]  # 演員
        a_list = actors.xpath('string(.)').replace(' ', '').split('/')  # 標簽套標簽,用string(.)同時獲取所有文本
        if len(a_list) > 2:
            for i in range(0, 3):
                actors_list.append(a_list[i])
        else:
            for j in range(0, a_list):
                actors_list.append(a_list[j])
        actors_list = '/'.join(actors_list)
        if actors_list == "":
            actors_list = None
    except Exception as e:
        actors_list = None
    print('actors_list :{}'.format(actors_list))

    # 獲取電影評價
    comment = []
    try:
        comment = selector.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/div/div[2]/a/span/text()')[0]
        if comment == "":
            comment = None
    except Exception as e:
        comment = None
    print("comment :{}".format(comment))

    try:
        # 打開資料庫連接
        conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='douban', charset='utf8')
        # 使用cursor方法創建一個游標
        cursor = conn.cursor()
        # # 執行sql陳述句
        query = 'insert into tb_film(url, filmname, score, showtime, genres, areas, mins, directors, scriptwriters, actors, comments) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'
        values = (
            url, filmname, score, showtime, genres_list, area_list, mins, directors_list, scriptwriters_list,
            actors_list,
            comment)
        cursor.execute(query, values)
        # 提交之前的操作,如果之前已經執行多次的execute,那么就都進行提交
        conn.commit()
    except Exception as e:
        print(e)
        # 回滾
        conn.rollback()
    # 關閉cursor物件
    cursor.close()
    # 關閉資料庫連接
    conn.close()
## 非完整代碼,畢業設計找丹成學長,q746876041

爬蟲輸出如下:

在這里插入圖片描述

4.2 資料分析部分

針對某部電影的資料分析

從不同時期影評人數、影評推薦指數、短評內容三個角度入手分析,不同時期的影評人數可以間接反映電影的熱度,因為大多數人都是在電影剛上映觀影完后寫的影評;影評推薦指數可以直接看出觀眾對電影的喜好程度,對最熱門的評論的匯總更能體現這部電影在大眾中的影響力,而不是單靠官方給出的豆瓣評分;短評詞云可以體現電影的許多要素,比如演員、題材、主要情節劇情、觀眾評價,可以讓影迷馬上把握該電影脈搏,從而決定這部電影是否值得一看,

隨機多部電影的綜合資料分析

如果說針對某部電影的分析是讓影迷決定是否看該部電影,那么隨機多部電影的綜合分析結果就是指引影迷去觀看哪部電影,使用隨機序號生成器在熱門電影串列中任意選擇電影,然后可視化出電影評分排行榜、電影Top20高分排行榜,電影上映時間線和電影型別分布,多方位直觀俯瞰熱門電影行情,對于大眾來說可以得知哪些電影近期更受歡迎,哪些電影評分高,電影在哪個時間段上映,從而發現自己喜歡的電影和屬于自己的電影偏好,對于電影制作方,可以針對電影型別分布,保持哪些電影型別的產出,加大哪類電影的制作投入以順應大眾口味,甚至可以決策在什么時候上映哪些型別的電影能獲得最大收益,

## 非完整代碼,畢業設計找丹成學長,q746876041
import pymysql
from pyecharts import options as opts
from pyecharts.charts import Timeline, Bar, Grid

# 上映年份
showtime = []
# 查詢中外電影上映年份
def select_showtime():
    try:
        # 打開資料庫連接
        conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='douban', charset='utf8')
        # 使用cursor方法創建一個游標
        cursor = conn.cursor()
        # 查詢資料表資料
        # 查詢上映年份
        sql = "select distinct showtime from tb_film where showtime is not null order by showtime "
        cursor.execute(sql)
        rows = cursor.fetchall()
        showtime.clear()
        for row in rows:
            showtime.append(row[0])
        print(showtime)
    except Exception as e:
        print(e)
        # 回滾
        conn.rollback()
    finally:
        # 關閉cursor物件
        cursor.close()
        # 關閉資料庫連接
        conn.close()
    return showtime


# 查詢電影名稱、評分
def select_film(i):
    # 電影名稱集合
    filmname = []
    # 評分集合
    score = []
    try:
        # 打開資料庫連接
        conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='douban', charset='utf8')
        # cursorclass = pymysql.cursors.DictCursor
        # 使用cursor方法創建一個游標
        cursor = conn.cursor()
        # 查詢資料表資料
        # 查找評分前十的電影名稱、評分
        cursor.execute(
            "select filmname,score from tb_film where score is not null and showtime > 0 and showtime <= %s order by score desc limit 10",
            i)
        # 電影名稱、評分集合
        film_list = cursor.fetchall()
        for row in film_list:
            # 電影名稱集合
            filmname.append(row[0])
            # 評分集合
            score.append(row[1])
        filmname.reverse()
        score.reverse()
        # 最大值
        max_score = max(score)
        # 最小值
        min_score = min(score)
    except Exception as e:
        print(e)
        # 回滾
        conn.rollback()
    finally:
        # 關閉cursor物件
        cursor.close()
        # 關閉資料庫連接
        conn.close()
    return filmname, score, max_score, min_score


def select_data(year):
    film_list = select_film(year)
    colors = [
        "#546570", "#c4ccd3", "#bda29a", "#ca8622", "#d48265",
        "#6e7074", "#749f83", "#61a0a8", "#2f4554", "#c23531",
        "#6e7074", "#749f83", "#61a0a8", "#2f4554", "#c23531"
    ]
    y = []
    for n in range(len(film_list[1])):
        y.append(
            opts.BarItem(
                name=film_list[0][n],
                value=film_list[1][n],
                itemstyle_opts=opts.ItemStyleOpts(color=colors[n]),
            )
        )
    return y


def show_score_top():
    # 查找上映年份集合
    showtime=select_showtime()
    # 生成時間軸的圖
    timeline = Timeline(init_opts=opts.InitOpts(page_title="豆瓣電影TOP250-評分TOP10的電影", ))
    for year in showtime:
        film_tuple=select_film(year)
        date_list=select_data(year)
        timeline.add_schema(is_auto_play=True, play_interval=1000)
        # 柱狀圖初始化
        bar = Bar()
        # 橫坐標
        bar.add_xaxis(film_tuple[0])
        # 縱坐標
        bar.add_yaxis(
            "",
            date_list,
            # 資料靠右顯示
            label_opts=opts.LabelOpts(is_show=True, position='right')
        )
        # 橫縱坐標翻轉
        bar.reversal_axis()
        # 全域配置
        bar.set_global_opts(
            # 標題
            title_opts=opts.TitleOpts(title="豆瓣電影TOP250-第{}年評分TOP10的電影".format(year), pos_left='center'),
            # 橫坐標隱藏
            xaxis_opts=opts.AxisOpts(is_show=False, max_=select_film(year)[2], min_=(float(select_film(year)[3]) - 0.1),
                                     split_number=10),
            # 縱坐標
            yaxis_opts=opts.AxisOpts(
                max_=9,
                # 字體大小
                axislabel_opts=opts.LabelOpts(font_size=10),
                # 隱藏坐標軸
                axisline_opts=opts.AxisLineOpts(is_show=False),
                # 隱藏刻度
                axistick_opts=opts.AxisTickOpts(is_show=False)
            )
        )
        # 組合組件
        grid = (
            Grid()
                .add(bar, grid_opts=opts.GridOpts(pos_top='8%', pos_bottom='12%', pos_left='25%'))
        )
        timeline.add(grid, "{}年".format(year))
        timeline.add_schema(is_auto_play=True, play_interval=1000, is_loop_play=False, width='820px', pos_left='60px')
    # 生成HTML
    html = "pages/iframes/score_top.html"
    timeline.render("./templates/" + html)
    return html
## 非完整代碼,畢業設計找丹成學長,q746876041

5 最后-畢設幫助

畢設幫助,開題指導,技術解答
🇶746876041

請添加圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325517.html

標籤:其他

上一篇:分布式一致性協議-Raft

下一篇:資料集成工具的使用(三)---FlinkX 從理論學習到熟練使用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more