Python爬虫之好看视频

之前在工作中有点忙,所以就没有写文章。因为之前有写过爬取图片的文章 ,所以今天就想写一篇爬取视频的文章。

首先第一步还是先要分析站,确定要爬取的网站链接:

https://haokan.baidu.com/tab/gaoxiao

爬取的视频为搞笑这个栏目的视频。

接下来要做的就是网站数据包的抓取,谷歌浏览器的抓包工具为我们分类好了每一个网络数据包的类型。

通过对该网站的分析可以得出网站是通过Ajax来局部刷新的,因为你不断往下拉的过程中,一个一个视频会跟着加载出来,所以,判断这是Ajax局部刷新。在不断下拉的过程中会加载出大量的数据包,当然有效数据包含在接口类型的数据中。

既然已经分析出,接口数据了那么接下来就可以通过这个接口数据获取到视频的标题与链接了。

经过测试,发现play_url是视频的链接。

根据接口的headers信息,找到request url,这个就是我们需要请求的url地址。

看看刚刚那些参数会不会有什么变化

接下来开始上代码:

首先第一步,获取所有的接口数据。

# 获取数据
def get_data(url):
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
    else:
        print('请求失败')
    return data

第二步,获取数据中videos下的所有内容,vedios下的内容就包括视频的标题与链接

# 获取视频列表
def get_video_list(data):
    video_lists = data['data']['response']['videos']
    return video_lists

获取到视频列表之后,就对视频的链接play_url发起请求,获取视频流,一般图片、视频、音频都是二进制文件。

def save_vedio(vedio_lists):
    # page = 0
    # while True:
    #     page += 1
    #     print('=' * 20 + '正在下载第{}页'.format(page) + '='*20)
    for vedio_list in vedio_lists:
        try:
            vedio_url = vedio_list['play_url']
            vedio_title = vedio_list['title'] + '.mp4'
            time.sleep(5)
​
            vedio = requests.get(vedio_url, headers=headers).content
            if not os.path.exists('vedio'):
                os.mkdir('vedio')
            with open('./vedio/{}'.format(vedio_title), mode='wb') as f:
                f.write(vedio)
​
        except Exception as e:
            break
    print('下载完成\n\n')

最后发现一个问题,就是通过这样的方式只能获取到20个视频,往下加载的视频无法获取到,这是为什么呢?

通过不断的检查发现每次下拉过程中抓取到的接口数据包都是一样的,最后经过测试发现,这个是cookies信息包含了时间戳,通过这一点来为访问的用户加载出其他页面的视频,这里的其他页面指的是每下拉加载一次为一页。

所以这里要构造请求头的时候要添加cookie信息,接下来你也会发现你获取的视频与你在浏览器中的不同。当然不同啦,你每访问一次就相当于刷新一下页面,你每一次刷新里面的视频内容都是不一样的。

代码已经上传到github和百度网盘

在公众号回复:好看视频即可获取代码。

B站视频链接:https://space.bilibili.com/401204029/video

现在可能未更新大概在5月17日20点会更新视频!!

 

好了,到这里又要跟大家说再见的时候了。希望我的文章能带给您知识,带给您帮助!同时也谢谢您能抽出宝贵的时间阅读,创作不易,如果您喜欢的话,点个关注再走吧。您的支持是我创作的动力,希望今后能带给大家更多优质的文章。

欢迎大家关注公众号或者添加我的个人微信将第一时间获得更新

 

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值