利用python爬虫爬取下载梨视频


一、爬虫环境的安装


主要分为几个环节

1.python的安装(最后选择3.x以上版本,本人本次编程都是使用python3的语言)

2.配置python环境变量(度娘了解一下)

3.选择合适的idle(这里推荐用pythoncharm)

4.下载安装Beautifulsoup4模块和lxml库

安装环节出现问题可以度娘了解一下,都是可以查到的

第一次接触爬虫的同学,建议可以参考这篇文章,这位大佬写的很详细。

地址如下:https://blog.csdn.net/u011139117/article/details/52788785


二、下载Chrome浏览器作为调试解析工具

 

通过解析页面,对页面信息进行剖析,获得视频id以及标题等信息。附上梨视频世界杯栏目地址:http://www.pearvideo.com/category_9 

 

 

三、编写爬虫程序:

1.导入模块

利用python爬虫爬取下载梨视频_第1张图片

2.伪装浏览器(防止网站反爬)


3.编写获取视频的函数,主要获取方法通过Beautifulsoup获取,保存用urlretrieve保存在本地文件夹中。(这里要注意一下,每个人的电脑保存的路径不同,这里是本人的个人路径)

利用python爬虫爬取下载梨视频_第2张图片



4.获取更多视频的动态函数方法,通过动态抓包观察,可以观察到视频列表的动态地址结尾是12的倍数,因此我们可以编写函数如下:

利用python爬虫爬取下载梨视频_第3张图片

5.最后运行:


、爬取结果:

于视频较大较多,需要耗费较多时间和流量下载,本次我就只下载了一部分视频作为参考


利用python爬虫爬取下载梨视频_第4张图片

利用python爬虫爬取下载梨视频_第5张图片
利用python爬虫爬取下载梨视频_第6张图片

实际测试视频可以播放,爬取成功。谢谢观看,有不足之处,敬请指出。

爬取要点

代码完完全全是自己敲出来的,同时我也说一下本次爬虫过程的一些注意要点:

1、抓取过程很重要:

在抓取过程中,要一步一步来,首先先是抓取每个视频的播放页面,发现主要区别在于后面的id,所以我们就要先抓取视频id;其次,获得视频页面后,获取真正的视频播放地址才是重头戏,通过beautifulsoup是抓取不到真正的播放地址的,因为播放地址是以js的形式来获取的,所以要通过正则表达式来获取srcUrl,从而下载。

2、动态地址较多:

像是如果只想抓取前面12个视频,就无需使用dowloadmore这个函数,但是如果想要更多视频的话,就要获取动态地址,这一步花费了我大量时间,由于没有经验,所以走了很多弯路,后来我发现在刷新的时候,把network数据清空一下,再点击页面下的“加载更多”,可以看到有一个js出现,可以获取到它的地址,最后得出结论。

六、源码

#导入模块
import requests
import re
import urllib.request
from bs4 import BeautifulSoup
#伪装浏览器
headers ={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'}
#定义一个下载函数
def dowload(url):
    #梨视频世界杯栏目地址
    #url = 'http://www.pearvideo.com/category_9'
    #使用beautifulsoup剖析网页的工具
    html = requests.get(url,headers=headers)
    soup = BeautifulSoup(html.text, 'html.parser')
    for video in soup.select('.vervideo-bd'):
        #获取视频的id
        id = video.select('a')[0]['href']
        #获取标题
        title = video.select('.vervideo-title')[0].text
        #根据观察分析出视频页面的地址
        new_url = 'http://www.pearvideo.com/{}'.format(id)
       # 获取视频页面的地址后剖析出真正播放的视频地址
        res = requests.get(new_url,headers=headers,timeout=3).text
        #利用正则表达式获取
        req = re.compile(r'srcUrl="(.*?)"')
        url_getVideo = re.findall(req, res)[0]
        global i
        print('正在下载第{}个视频'.format(i),title,url_getVideo)
       #保存视频
        urllib.request.urlretrieve(url_getVideo, 'E:\\unity\image\{}.mp4'.format(i))
        i+=1
#动态页面的获取函数
def dowloadmore():
    n=12
    while True:
        if n>36:
            return
##http://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=24&mrd=0.8168488163466117&hotContIds=1375878,1375886,1375856
#http://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=36&mrd=0.5650126657752985&hotContIds=1375878,1375886,1375856
 #通过chrome浏览器分析,获取动态页面的地址,发现地址后面是12的倍数
        url = 'http://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start={}'.format(n)
        n+=12
        dowload(url)
i = 1
dowloadmore()













个人收获还是很多的,至少现在叫我爬取一些简单的网站数据,我是可以爬取出来的。 


                                                                          —————Freakgz
 
   
 
  


 
  

 
  



 
  

 
  

 
   
  

 
  


 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  

 
  





你可能感兴趣的:(利用python爬虫爬取下载梨视频)