python之梨视频网站视频爬取及下载

版权声明:为NH4L所有,转载请注明 https://blog.csdn.net/LeeGe666/article/details/82860671

这次爬取网站结构较为简单,适用于初学爬虫!
这次学习需要先把python和pip的环境配好,还需要引入一些包**(re,lxml,os,requests)**
直接在cmd中进行 pip install 包名就可以成功安装啦。

一、观察和分析网站

第一步、打开网站,转到美食的页面,之后按下f12,再选择network,选择XHR,这是ajax加载出来与页面相关的,按下f5刷新一些,可以看到这个Request URL,这个网址在浏览器中打开就是该页面的网址,ategoryId=6这个6代表的就是美食这一栏,也就是我们要爬取的页面,start=12代表是最开始的在页面上显示的12个视频。
网站地址:梨视频美食
在这里插入图片描述
如果滚轮往下移,点击加载页面,就会发现多一个链接,他的Request URL中的start=24,也就是加载了24个视频
在这里插入图片描述
第二步、我们再在刚才的页面上右键检查页面源代码
找到第一个视频的代码位置,找到vedio-数字,再点开第该视频的播放页面,发现这个vedio-数字正好是对应的就是http://www.pearvideo.com/video_数字
在这里插入图片描述

二、获取视频信息

最开始先引入一些需要使用的

import requests
from lxml import etree 
import re
from urllib.request import urlretrieve
import os

第一步、首先写一个获取页面源代码的函数

def get_html(url):
    response = requests.get(url)
    if response.status_code == 200:#确认状态码为200
        return response.text               #如果成立就返回页面源代码,有误就是返回空
    else:
        return None
def main():
        url = 'http://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=6&start=12
        html = get_html(url)
        print(html)
if __name__ == '__main__':
    main()

第二步、解析主页面
用的是etree模块,用它来分析页面源代码,之后找到刚刚的vedio-数字,利用xpath把视频的id找出来,之后再把视频播放的地址连接起来
其中的append是把刚刚拼接好的播放地址,存到一个list列表中,方便下面对每个地址进行遍历。

def get_vedio(url):
    html = get_html(url)										#调用上面的获取源代码的函数
    html = etree.HTML(html)								#解析页面
    video_id = html.xpath('//div[@class="vervideo-bd"]/a/@href') 	#用过该标签的xpath找到视频id
    
    video_url = []								                #声明一个list
    starturl = 'http://www.pearvideo.com/			#主视频地址

    for id in video_id: 					
        newurl = starturl + id			# 拼接每一个视频播放的地址
        video_url.append(newurl)   #获取视频播放地址
        print(newurl)					

第三步、得到视频真正播放地址
在这里插入图片描述
打开页面源代码,找到如下链接,通过一个循环,将这个页面上的源代码获取出来,之后用正则匹配视频真正的播放地址匹配出来。

    for play_url in video_url:
        html = get_html(play_url)
        real_url = re.compile('srcUrl="(.*?)"')				#增加效率
        real_url = re.findall(real_url,html)
        #获取视频名称
        video_name = re.compile('<h1 class="video-tt">(.*?)</h1>')
        video_name = re.findall(video_name,html)
        print(video_name,real_url)

三、下载视频

通过urlretrieve方法下载视频

def download_vedio(real_url,video):
    #自己设置一个路径
    path = 'D:\\python Projects\\pyDownloadPictrues\\18-7-18梨视频\\{}.mp4'.format(video)
    if not os.path.exists(path):					#判断有没有这个路径,这个可以自己设置的,不一定要和我一样,设置为'D:\\vedios\\{}.mp4'.format(video)'也是可以的
        print("正在下载:{}".format(video))
        urlretrieve(real_url, path)                # 下载url,下载文件夹
        print('ok!!!!!')
    else:
        print('no!!!!!')

主函数设置一下循环:

def main():
    sum = 0				                      #视频的总数量
    while True:			                      #一个while循环
        if sum > 48:		                      #如果获取到48个视频的时候就返回空,就是退出程序
            return			
        url = 'http://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=6&start={}'.format(sum)							
        #最开始分析网站的的网址,format(sum),代表的就是视频的页面显示的总数
        sum += 12					        #分析的时候每次往下加载的时候增加12个视频
        get_vedio(url)				        #调用上面获取视频的函数
if __name__ == '__main__':		#判断是否为当前文件
    main()										#执行main函数

到这里我们爬取就结束了,其实还有很多操作都没有进行的,现在只是成功的把视频下载下来,后续还可以将视频的发布时间,点赞评论数给获取下来,存储到数据库,需要同学们自己慢慢挖掘了。

猜你喜欢

转载自blog.csdn.net/LeeGe666/article/details/82860671