给小白的python爬虫入门之批量爬取别样网的视频素材

网络爬虫,听起来很神秘,其实也不过如此,简单来说,只要网站开放了端口即用户能访问这个网站,那么无论这个网站的反爬机制做的有多么好,只要你的技术够,总会有机会破解它。

换句话说,不是你的网站很安全,而是你的信息没有价值。我前几天无意中找到了别样网,选择这个网站的原因是这个网站里有很多视频素材,这是很少有的。
在这里插入图片描述

一般来说,只要网站上有的东西,都能抓取下来,就看这东西有没有价值罢了。大家可以翻阅我以前的文章:

当然,我目前所爬取的都是开放的服务型网站,不涉及隐私信息,这里我想说的是:

每一种新兴技术就好比是一把刀,刀本身没有错,关键看用刀的人是谁,用刀的目的是什么。

学习爬虫技术能让我们清楚网络爬虫的运行机制,以此来提高大家的安全意识,从另一方面来说,通过学习爬虫技术,能提高我们对python的学习兴趣。

下面展示一下最终效果:
在这里插入图片描述
使用爬虫,几十个视频分分钟下载完成,顺带自动命名,是不是很方便?

如果手动下载,我们还需要各种登陆,重复各种操作,十分钟都不一定能解决,况且如果要下载的视频很多,岂不是很麻烦?

这就是爬虫的优势所在!话不多说,下面我们来讲讲具体方法:
在这里插入图片描述
我这里使用的是谷歌浏览器,按住F12,或者右键进入检查,便可打开这一界面,因为我们需要的东西不在HTML的代码里(如果在,我们可以用xpath):
在这里插入图片描述
所以我们找到Network这个选项:
在这里插入图片描述
按住Ctrl+R刷新界面,可以看到下面有很多栏,这是网页返回的数据,我们需要的视频就在这里面,往下翻翻:
在这里插入图片描述
可以看到有很多.MP4的后缀,我想这应该就是我们想要的东西,点击进去看一下:
在这里插入图片描述
看这里的url地址,我们复制一下,用浏览器打开:
在这里插入图片描述
可以看到,确实是一个视频,而且这个视频是我们想要的,但是,光有一个视频是不够的,既然是批量下载,肯定要找到其他存放这些地址的列表,于是我们再找找看:
在这里插入图片描述
我们发现这个20002出现了很多次,我们分别点进去看一下,可以发现这有一个共同点,所有的20002里面都是有数据的,但是,里面的数据有限,看来也不是这一条数据,接着再往下找:
在这里插入图片描述
好像快要接近了,我们看这里面有很多数据,打开来看一下:
在这里插入图片描述
很好,里面有我们想要的东西,我们在headers里找到他的url地址,并使用浏览器打开它:
在这里插入图片描述
出现异常了,原因是这里的请求需要携带参数,我们在GitHub找到一个解析工具:
在这里插入图片描述
https://curl.trillworks.com/

回到刚刚的网页:
在这里插入图片描述
复制cURL并粘贴到刚刚curl command里:
在这里插入图片描述
把右边的python request全部复制到python编辑器里:

import requests

cookies = {
    'BAIDU_SSP_lcr': 'https://www.baidu.com/link?url=kzwk2tY6VdLzGcc1Nfo9AWYgrzw-jxD1wVstT4gKkku&wd=&eqid=90bb793e00089362000000065e43d96c',
    '_dg_playback.7b6028a56aac520d.ce42': '1',
    '_dg_abtestInfo.7b6028a56aac520d.ce42': '1',
    '_dg_check.7b6028a56aac520d.ce42': '-1',
    '_dg_antiBotFlag.7b6028a56aac520d.ce42': '1',
    '_dg_antiBotInfo.7b6028a56aac520d.ce42': '10%7C%7C%7C3600',
    'SESSION': 'OTIyZGE2ZTgtMjM0Yi00NmZjLWEyM2MtMmJiYTVhMzEwZWJj',
    '_dg_id.7b6028a56aac520d.ce42': 'bdbb5697b510c5bc%7C%7C%7C1581504892%7C%7C%7C9%7C%7C%7C1581509404%7C%7C%7C1581509342%7C%7C%7C%7C%7C%7C53b348475c9a517a%7C%7C%7C%7C%7C%7Chttps%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dkzwk2tY6VdLzGcc1Nfo9AWYgrzw-jxD1wVstT4gKkku%26wd%3D%26eqid%3D90bb793e00089362000000065e43d96c%7C%7C%7C1%7C%7C%7Cundefined',
}

headers = {
    'Connection': 'keep-alive',
    'Accept': 'application/json',
    'Sec-Fetch-Dest': 'empty',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36',
    'Content-Type': 'application/json',
    'Origin': 'https://www.ssyer.com',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'cors',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

data = '{"cateId":2,"order":2,"recommendType":1,"page":{"showCount":20,"currentPage":2}}'

response = requests.post('https://www.ssyer.com/apis/20001', headers=headers, cookies=cookies, data=data)
print(response)

在这里插入图片描述
200表示请求成功!我们在这里解析一下:
在这里插入图片描述
在response的后面加上.text:

response = requests.post('https://www.ssyer.com/apis/20001', headers=headers, cookies=cookies, data=data).text

可以看出,我们想要的东西就在里面,只要提取出来就可以了:

response = requests.post('https://www.ssyer.com/apis/20001', headers=headers, cookies=cookies, data=data)
json_datas = response.json()
json_data = json_datas['data']

这里我们把下载好的视频存到一个名为"20200213video"的文件夹里:

video_path = '20200213video'
if not os.path.exists(video_path):
    os.mkdir(video_path)

接下来用一个循环,边提取边下载:

for item in range(len(json_data)):
    print(json_data[item]['video'])
    print("正在下载第%s个视频"%(item+1))
    file_path = video_path+'/'+ '%s'%(item+1) +'.mp4'
    urlretrieve(json_data[item]['video'],file_path,cbk)

简单讲讲最后一句里的urlretrieve(),这是负责下载文件的函数,括号左边是下载地址,中间是保存的地址,第三个是检查下载进度:

def cbk(a,b,c):
    '''回调函数
    a:已经下载的数据块
    b:数据块的大小
    c:远程文件的大小
    '''
    per=100.0*a*b/c
    if per>100:
        per=100
    print('%.2f%%' % per)

在这里插入图片描述
但是下载一个视频也就几秒的事,看上去显得很多余,所以这一步也可以不要:
在这里插入图片描述
我们可以播放一下视频:
在这里插入图片描述
确认过眼神,是可以播放的视频。今天的内容到这里就结束了,大家如果有问题的话,欢迎大家在评论区留言!

发布了60 篇原创文章 · 获赞 123 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/zbp_12138/article/details/104296861