前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >骚操作!那些富有感情的影视台词截图都是哪来的?

骚操作!那些富有感情的影视台词截图都是哪来的?

作者头像
小小詹同学
发布2019-09-24 15:41:01
1.3K0
发布2019-09-24 15:41:01
举报
文章被收录于专栏:小詹同学

泰坦尼克号里面说过几次LOVE?

当我们祝福生日快乐的时候,仅仅是生日快乐显得干瘪,找来的表情包生硬诙谐。可是配合我们共同看过的影视,发过去影视截图,电影里面充沛的感情能在一张图片里表达的淋漓尽致,可我们又能收集到多少影视截图呢,我们日常看电影的时候又怎么会留心这种东西呢?

Python大法好啊!

思路设计

如果想要获取到电影台词,语音识别不要想,肯定是靠字幕文件的搜索统计来获得。那么程序的目标就是

  • 爬取字幕文件
  • 搜索分析统计字幕文件
  • 保存结果

在这里需要有一个小常识就是,字幕文件的格式应该是包含电影台词出现时间和电影台词的,我们需要记录时间和相应的台词。

我们暂定目标为 寻找泰坦尼克号,里面所有带love的台词和时间。

爬虫

经过许多字幕网站测试,那些长得越简单的字幕网站,下载链接摆的越明显的网站,越难爬取,封装headers、cookies都没法简单获取字幕的下载链接(http://www.zimuku.la 网站的下载地址谁会分析,或者想一起探讨爬虫技术,可以加作者微信好友,微信号15600820866)。

见过一些测试我找到了 射手网(伪) - assrt.net ,不用换ip,不用cookies,简单封装headers伪装浏览器即可。我思考如何爬取那个很难的字幕网站,浪费了两天时间,还没有头绪。测试好几个字幕网站,找到一个爬取简单的网站,只用了一小时。还真是方向比努力更加重要,在达成目标的途径上,要灵活多变,思考寻找。

这里我们的目标是泰坦尼克号,我们人工搜索到泰坦尼克号的页面:

泰坦尼克号

代码语言:javascript
复制
url = "https://assrt.net/xml/sub/610/610293.xml"

我们从这个地址开始,寻找这个电影里面所有的love(至于全网上百万影视所有的love,自己外面套个循环就好)

分析页面结构和内容,我们得到本模块需要的步骤。

  1. 获取该页面网页源码,绕过反爬
  2. 获取下载地址
  3. 保存文件(是一个压缩包,内含多个字幕文件)
代码语言:javascript
复制
#封装头部
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
#获取网页源码
req = requests.get(url, headers=headers)
代码语言:javascript
复制
#正则匹配,并且子串直接获取下载地址
ans = re.search(u"(/download/.*?)\"", str(req.content, 'utf8'))
download_url = "https://assrt.net" + ans.group(1)
代码语言:javascript
复制
#下载内含字幕文件的zip文件到桌面
data = requests.get(download_url, headers=headers)
adr = "C:\\Users\\XU\\Desktop\\" + str( download_url[download_url.rfind('/')+1:] )
with open(adr,"wb") as code:
     code.write(data.content)

解压

网站部分提供的是zip文件,不都是直接可以打开的ass,art文件,我们做一个判断,如果是zip那我们就用模块直接给他解压了,没什么难度,Python真好用

代码语言:javascript
复制
#解压文件
def unzip(adr):
    #后缀判断
    if(adr[-3:]=='zip'):
        f = zipfile.ZipFile(adr, 'r')
        os.chdir("C:\\Users\\XU\\Desktop")
        #解压所有文件
        for file in f.namelist(): 
            f.extract(file,"temp/")
        f.close()
        fileList = os.listdir( "C:\\Users\\XU\\Desktop\\temp")
        os.chdir("C:\\Users\\XU\\Desktop\\temp")
        #返回文件列表,便于多个文件搜索
        return fileList
    else:
        os.chdir("C:\\Users\\XU\\Desktop\\")
        return [adr,]

字幕文件的格式

无非就是 时间 颜色字体大小等信息 字幕文本

一眼看穿,按行读取,匹配出时间字幕就成。

提取并搜索

参数是待查找的字幕文件我们要找的台词

代码语言:javascript
复制
def search(fileList,msg):
    #结果保存进list
    ans = []
    #循环每个文件
    for file in fileList:
        with open(file, encoding='utf8', errors='ignore') as file_obj:
            for line in file_obj.readlines():
                #找英语的话,全部小写处理
                line = line.lower()
                #如果找到了,就保存
                if line.find(msg)!= -1:
                    #保存的格式是时间+当前台词
                    ans.append(last_line+line+'\n') #information
                #上一行的时间直接保存在last_line里,具体格式要熟读字幕文件的格式才能看懂哦
                last_line = line
        #多个字幕文件,其中内容相同,但是语言不一样,只要找到了一个,说明不用继续找下去了
        if len(ans)!=0:
            break
    return ans

保存搜索结果

代码语言:javascript
复制
def write_down(ans):
    with open('ans.txt','w') as f:
        f.writelines(ans)
        f.close()
    print("查找到"+str(len(ans))+'句话,已保存至ans')

泰坦尼克号里面说过几次LOVE,在什么时间?

02:49:56,480 --> 02:49:58,150 i love you, jack.

小结

当我们知道了指定字幕发生的时间,我们也就能很简单的截图保存了。

本来海量的工作,在Python的帮助之下解决了,当然也不是简单的Python。路上我们要找到好爬取的网站,我们要解析字幕文件的格式,我们要提前想到我们想要的台词数据藏在字幕文件里面,字幕文件为了定位,必须有时间标签。

Python不是万能的,当你有一万种使用它的思想,它才是万能的;如何让好的工具更加大放异彩,是我们需要经历和思考的。

后台回复「截图」获取代码

推荐阅读:(点击下方标题即可跳转)

骚操作!清理曾经爱过的网站

骚操作!如何给你爱的读者每天发早报?

《中餐厅》弹幕数据分析,我不要你觉得,我只要我觉得!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小詹学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 泰坦尼克号里面说过几次LOVE?
  • 思路设计
  • 爬虫
  • 解压
  • 字幕文件的格式
  • 提取并搜索
  • 保存搜索结果
    • 泰坦尼克号里面说过几次LOVE,在什么时间?
    • 小结
    相关产品与服务
    语音识别
    腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档