爬取动态网页酷六视频(响应体的应用)

1.判断网页是否为动态
2.寻找动态数据的来源
3.对比数据
4.解析数据
5.保存数据
6.完整代码展示

1.判断是否为动态网页

单击鼠标右键查看网页源代码,然后在原网页任意复制一个标题,在相应的网页源代码查看是否能够找到匹配项,若无匹配项则说明该网页是动态实时更新的,否则为静态网页
在这里插入图片描述

2.寻找数据来源

若为动态网页则在开发者工具里面寻找到XHR,该项动态网页的数据来源。在该项里面找到数据来源的url后,模拟计算机向该网页发送请求。

在这里插入图片描述
响应为200,说明请求数据成功。
在这里插入图片描述

3.对比数据

因为我们需要爬取多个视频,所以要先对比每页数据的不同之处,如下图,这个和之前爬取图片的网页不太一样,这个多页数据是在同一个url下面,所以我们在XHR数据报里面寻找多页数据的不同。为了避免偶然性,我刷新了三个数据包,对比三个数据包的不同,很容易发现它的pageno好像就是页数,从0顺序加一。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后请求三页pageNo的数据,请求均成功,说明我们已经成功获取到数据
在这里插入图片描述

4.解析数据

首先把数据转换成json格式,json格式和python里面的字典形式很相似,为了方便提取数据,所以我们把数据转换成json格式的格式。
在这里插入图片描述
这里将data数据提取出来,循环打印出我们在data字段里面需要得数据,即视频的url地址和name。
在这里插入图片描述
事实上,在这里犯了一个错误,我们打印出来的三页数据是一样的,这是因为我们请求的都是一个动态网页的数据,实际上我们应该请求的三个动态网而言数据。所以应该将最开始的url简化后也要放进循环里面,如下图所示。
在这里插入图片描述
再次打印视频数据的url和name,这次会发现是三页不同的数据。
在这里插入图片描述
然后用将视频数据变成能够写进代码中的二进制数据。

video_data = requests.get(url=video_url, headers=headers).content

5.保存数据*

使用os模块创建文件夹(这一段应该放在循环外面,不然会循环执行这一步,增加代码的时间复杂度),最后打开文件夹保存视频。

import os

if not os.path.exists('视频'):
    os.makedirs('视频')
    
with open('酷六视频\\' + video_title, mode='wb') as f:
    f.write(video_data)
    print('下载完成:', video_title)

在这里插入图片描述

6.完整代码展示

import requests
import json
import os

if not os.path.exists('酷六视频'):
    os.makedirs('酷六视频')

'https://www.ku6.com/video/feed'

url = 'https://www.ku6.com/video/feed?'
headers= {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}

for page in range(0, 3):
    print("=====================正在保存第{}页数据===================".format(page+1))
    params = {
            'pageNo': str({}).format(page),
            'pageSize': '40',
            'subjectId': '76'
        }

    response = requests.get(headers=headers, params=params, url=url)
    # print(response.url)
    # print(response)
    json_data = response.json()
    # print(json_data)

    data_list = json_data['data']
    for data in data_list:
        video_title = data['title'] + '.mp4'  # 视频的文件名
        video_url = data['playUrl']  # 视频的url地址
        print(video_title, video_url)

        video_data = requests.get(url=video_url, headers=headers).content

        with open('酷六视频\\' + video_title, mode='wb') as f:
            f.write(video_data)
            print('下载完成:', video_title)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鎮後生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值