2022年 11月 5日

如何用python爬虫下载视频_用python做爬虫下载视频

用python有一段时间了,对python是十二分喜爱,在我看来python是个好工具,可以轻松简洁的帮我完成一些我想要完成的工作。下面和大家分享一下我用python爬取某网站视频的案例。用python去保存网站的视频,主要是为了后续的查看和备份。如果有需要做爬虫研究的同学可以一起探讨下。本文主要用到requests库和BeautifulSoup库。

1.抓取视频第一步,分析目标网站的地址

本文中我爬取的是X网站,这个网站需要登录,所以第一步是模拟网站登录,如果你抓取的网站是不需要登录的,可以忽略这一步。下面放上代码。

session = requests.session()

UA = “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.13 Safari/537.36”

header = {“User-Agent”: UA}

session.post(login_url,headers=header,data={‘phone’:’***’,’password’:’***’})

2.抓取视频第二步,分析页面当中的视频地址

查看视频地址的方法有很多,我用的是google的开发者工具,通过查看network,查看视频页面所请求的链接地址,然后根据视频页面url的get参数,找出请求视频地址二者之间的关系。放上network的截图视频页面实际的请求链接

3.抓取视频第三步,模拟请求视频地址,保存到本地,下面放上部分代码

#模拟请求视频页面

f = session.get(‘http://www.xxx.com/xxxxxxxxxxxx’,headers=header)

用到BeautifulSoup库解析页面源代码当中的一些参数

soup = BeautifulSoup(f.content,’html.parser’)

lesson_list = soup.find_all(‘li’,attrs={‘class’:’video’})

if lesson_list:

all_urls = {}

for lesson in lesson_list:

v = lesson.attrs[‘onclick’]

matches = re.compile(r’\d+’).findall(v)

id = matches[0]

lesson_id = matches[1]

#构造要保存的文件名

filename = lesson.attrs[‘data-123’] + ‘_’ + lesson.attrs[‘data-456’]

filename = re.sub(“[\s+\.\!\/_,$%^*(+\”\’]+|[+——!,。??、~@#¥%……&*()]+”,’ ‘,filename)

filename = filename.replace(‘ ‘, ‘_’).strip(‘_’)

mp4_url = session.get(‘http://www.xxx.com?id={}&token_id={}’.format(lesson_id,mp4_token_id),headers=header)

#拼接保存的文件地址

file = dirname + filename + ‘_’+ lesson.attrs[‘id’] + ‘.mp4’

with open(file, ‘wb’) as f:

video = requests.get(mp4_url.text, stream=True)

print(‘正在下载视频:id:{},lesson_id:{},file_name:{},url:{}’.format(id, lesson_id, file, mp4_url.text))

for chunk in video.iter_content(chunk_size=1024):

if chunk:

#保存视频

f.write(chunk)运行代码,已经开始下载视频^_^

补充两点

1>需要用到python requests库当中的requests.session(),如果是需要登录的网站,需要先登录,再使用同一个session去请求其它页面

2>如果想提高抓取效率,可以启用多进程,多进程可以大大提高爬取视频的效率

from multiprocessing import Pool

pool = Pool(10) #创建进程池,里面有10个进程

t = pool.map(run,args)

pool.close()

pool.join()

总结

使用python抓取视频还是很方便的,关键是找到视频页面url和视频地址url之间的联系,然后模拟请求视频地址url就可以了。最后注意必要时刻可以采取多进程,更换ip,更换请求头的方式去抓取视频,防止ip被网站封禁,这是需要注意的,如果大家有爬虫方面的其他奇淫技巧,欢迎联系我一起探讨。