用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被网站封禁,这是需要注意的,如果大家有爬虫方面的其他奇淫技巧,欢迎联系我一起探讨。