20193118彭淇靖 2019-2020-2 《Python程序设计》实验四报告

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
评分标准:
(1)程序能运行,功能丰富。(需求提交源代码,并建议录制程序运行的视频)10分
(2)综合实践报告,要体现实验分析、设计、实现过程、结果等信息,格式规范,逻辑清晰,结构合理。10分。
(3)在实践报告中,需要对全课进行总结,并写课程感想体会、意见和建议等。5分

课程:《Python程序设计》
班级: 1931
姓名: 彭淇靖
学号:20193118
实验教师:王志强
实验日期:2020年6月14日
必修/选修: 公选课

1.实验内容

用爬虫技术免费观看vip电影,将电影的片段下载并拼接片段实现

2. 实验过程及结果

打开视频网站寻找想看的vip电影并点击开始观看,复制当前网址。在主页网址处删去后面的部分代码,再在最前方加上“jx”,回车得空白网页,则将刚刚复制的网址完整的粘贴在后面,回车打开即可得到电影播放页面,在network里找到jx文件,随机点一个得其网址,由于视频片段的网址有规律,则找到规律爬取片段,并全部下载

导入requests模块,将网址放入url,通过requests找到url的内容,下载每一个网址时将其print,可以直观的看出下载的具体片段有哪些

由于数据时二进制模式,则用content进行处理

在根目录下,创建文件,名为kankan,由于片段过多,需要变化的命名则后面加{},用format来截取网址后十位,as f重命名,将下载的一个片段写入文件夹

循环调用函数,来将所有片段写入文件

由于片段过多则20个同时下载,增加速度

关闭

运行结果:开始下载电影片段,每个片段约4秒,片段按顺序排列

源代码:
import requests
from multiprocessing import Pool

def download(i):
url = 'https://youku.com-l-youku.com/20181206/726_8d28f3fe/1000k/hls/a572155a409%d.ts' % i
print(url)
r = requests.get(url)
ret = r.content
with open('./kankan/{}'.format(url[-10:]), 'wb') as f:
f.write(ret)
if name == 'main':
pool = Pool(20)
for i in range(1310):
pool.apply_async(download, args=(i, ))

pool.close()
pool.join()

全部下载到文件夹后,即可用另一个程序进行拼接
from moviepy.editor import *
import os

Clip1 = VideoFileClip('3000000.ts')

Clip2 = VideoFileClip('3000001.ts')

Clip3 = VideoFileClip('3000002.ts')

final_clip = concatenate_videoclips([Clip1, Clip2, Clip3])

final_clip.write_videofile("./video_all.mp4", fps=24)

L = []
for (root, dirs, files) in os.walk("./kankan"):
files.sort()
for file in files:
if os.path.splitext(file)[1] == '.ts':
# 提取视频路径
filepath = os.path.join(root, file)
# 提取视频缓存地址,指针
video = VideoFileClip(filepath)
# 存储所有视频地址的指针
L.append(video)

print(L)

视频拼接

final_clip = concatenate_videoclips(L)

导出视频文件

final_clip.write_videofile("./kankan/video_all.mp4", fps=24)

3. 实验过程中遇到的问题和解决过程

  • 问题1:在cmd下载包时总提示不是内部或外部命令,也许是当初的安装路径有些问题
  • 问题1解决方案:直接在pycharm的页面打上要导入的包的名称,标红灯则将鼠标放在上面,直接点击instal即可
  • 问题2:由于电影被分为上千个片段,一个个进行爬虫将造成代码冗余利用循环
  • 问题2解决方案:利用循环
  • 问题3:下载得到的数据格式不符
  • 问题3解决方案:用content处理

对本课的感悟、思考

不知不觉学习Python已经一个学期了,从一个cmd都不知道在哪里的电脑小小白变成了一个能编写一些些简单程序的小白。与python进行初接触是在大一上的社团中,但由于班级活动与其他的社团活动与其时间相冲,我只在大一上学会了如何安装Python,并打出人生第一段代码“hello world”,于是大一下选修Python一方面是为了弥补大一上的遗憾吧。
Python对我而言并不算简单,刚开始的时候由于几乎没什么基础,只能多问同学和老师。同时也很感谢你们在Python上给予我的帮助。虽然能力有限,但每一次作业我都有认真对待,还有好几次在ddl之前才提交上。甚至有一次被卡在了一个地方,反复查询百度并尝试好几种网友的方法,但都解决不了,然后就超时二十分钟左右才提交上,当时就已经体会到了身为程序员的滋味……
Python对我而言是全新的知识,在大多数时候,理解新知识可能有困难,但最困难的莫过于觉得它真的难而抗拒它,在学会Python知识的时候学着去喜欢学Python也算是我的一种收获吧。本学期c和p双编程,有被难到。有时候两者的区别与共同点对于学习它们有利有弊,在编c的时候用Python的格式发生过不止一次……学习Python真的让我收获了不少,对着视频做笔记写代码挺有用的,特别是我忘记知识点的时候直接看笔记,还可以将笔记里的代码改编成作业,一举两得。

建议:刚开始的时候为了照顾像我这样的小白设置成周末提交挺好的,请保留。中后期对于当天作业当天截止提交的做法我也很赞同(这样就不用一直想着要写Python作业)

参考资料

posted @ 2020-06-14 23:52  20193118彭淇靖  阅读(116)  评论(0编辑  收藏