前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
基本开发环境
Python 3.6
Pycharm
相关模块的使用
import requests
import re
目标网页分析
百度搜索YY,搜索结果第一个就是目标网址了,点击进去选择分类中的小视频,如下图所示:
分析视频地址
按照常规操作就是:
1、打开开发者工具,选择 network
2、点击刷新网页、查看返回数据
但是这个网站和平常的静态网页有所不同,按照正常的网站它是有翻页的,而这个网站是下滑网页,才会出现新的视频数据。
所以按照步骤应该是:
1、打开开发者工具,选择清空所有数据内容
2、下滑网页内容
如上图所示,同样会给你返回很多数据内容,如果需要一个一个去找的话,是非常的麻烦且浪费时间,可以选择复制一个视频的名字或者发布视频用户的名字,在开发者工具当中进行搜索。
如上图所示,每个这样的链接所对应的是10个短视频的地址,通过复制粘贴查看每个url地址所对应的使用,像后缀带有 .jpg 这些肯定就是图片了,其中的 resurl 就是我们所需要的视频地址了。
获取视频url地址以及视频名字
import requests
# 1、确定爬取的url路径,headers参数
url = 'https://api-tinyvideo-web.yy.com/home/tinyvideos?'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',
}
param = {
'data': '{"uid":0,"page":1,"pageSize":10}',
}
# 2、发送请求 -- requests 模拟浏览器发送请求,获取响应数据
response = requests.get(url=url, headers=headers, params=param)
data = response.json()
print(data)
# 3、解析数据
# 提取字段
data_list = data['data']['data']
# 循环遍历
for data1 in data_list:
resdesc = data1['resdesc'] + '.mp4' # 视频的题目
resurl = data1['resurl'] # 视频的url地址
注意点:
我传的param的参数和链接有一些不一样,我只传入了data,因为如果是所有的参数都传入的话,那么返回的结果是字符串形式,这样还会多一些步骤
1、正则匹配只提取里面的json格式数据;
2、字符串转json。
保存视频
请求视频地址,通过wb保存二进制的方式保存视频
video_data = requests.get(resurl, headers=headers).content
# 4、保存数据
with open('video\\' + resdesc, mode='wb') as f:
print('正在下载:', resdesc)
f.write(video_data)
如何实现多页爬取
我们单单只是爬取10个短视频是肯定不够的,所以我们要分析这个视频地址的规律。
网页多下滑几次,可以多看几个可以发现,data中的page就是对应的页码。所以可以通过循环 给page传参,即可实现多页爬取的效果。
相关视频教程
单页爬取的完整代码
import requests
# 1、确定爬取的url路径,headers参数
url = 'https://api-tinyvideo-web.yy.com/home/tinyvideos?'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',
}
param = {
'data': '{"uid":0,"page":1,"pageSize":10}',
}
# 2、发送请求 -- requests 模拟浏览器发送请求,获取响应数据
response = requests.get(url=url, headers=headers, params=param)
data = response.json()
print(data)
# 3、解析数据
# 提取字段
data_list = data['data']['data']
# 循环遍历
for data1 in data_list:
resdesc = data1['resdesc'] + '.mp4' # 视频的题目
resurl = data1['resurl'] # 视频的url地址
video_data = requests.get(resurl, headers=headers).content
# 4、保存数据
with open('video\\' + resdesc, mode='wb') as f:
print('正在下载:', resdesc)
f.write(video_data)
本篇文章留堂作业:
1、多页爬取的怎么实现;
2、当爬取视频标题出现特殊字符怎么处理?文件命名出现特殊字符是无法保存的。
记得点赞、分享哟 ~~~