适合新手小白揣摩;
环境准备:
设备 | 软件版本 |
---|---|
windows 环境(可上网) | pycharm 3 |
# 爬虫思路
# 1.确定爬取的url路径,headers参数
# 2.发送请求, --- requests 模拟浏览器发送请求,获取响应数据
# 3.解析数据, --- json模块, 把json字符串转换成python可交互的数据类型
# 4.保存数据, --- 保存到目标文件夹中
import requests
import json
def video_spider():
# 遍历需要爬取的页数 一共爬取10页。
for page in range(1,11):
# 将爬取该网页的页数打印出来
print('+++++++++++++正在爬取第{}页数据++++++++++++++'.format(page))
# 1.确定爬取的url路径,headers参数
# global data_title, video_data
base_url = 'https://v.6.cn/minivideo/getMiniVideoList.php'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
# 多页视频一起拉取,这个值在网页的 F12中的 payload 查找
params = {
'act':'recommend',
'page': str(page),
'pagesize':'30'
}
# 2.发送请求, --- requests 模拟浏览器发送请求,获取响应数据
# 将页数参数值在params=params表示出来。
response = requests.get(base_url, headers=headers,params=params)
data = response.text
# print(data)
# 3.解析数据, --- json模块, 把json字符串转换成python可交互的数据类型
# 将json数据转换为字典
dict_data = json.loads(data) # (字典)
# print(dict_data)
# 解析数据,将数据以列表格式提取出来
data_list = dict_data['content']['list'] # (列表)
# print(data_list)
# 遍历列表下的字典
for data_dict in data_list:
# print(data_dict)
# 提取出来关键字,分别标题和mp4链接地址
# data_title = data_dict['title']
# 上面提取出来的标题不是以.mp4结尾的,需要修改为 .mp4结尾的文件 ,如下:
video_title = data_dict['title']
# video_title.replace('/','-') 表示遇到名称里面包含/的特殊字符 替换成 '-'
video_title01 = video_title.replace('/','-') + '.mp4'
video_url = data_dict['playurl']
# print(video_title, video_url)
print('正在下载:', video_title01)
# 使用视频链接获取视频数据:
# 通过requests.get 方法,把视频url地址传递进去,并且少不了请求头参数headers
# 模拟浏览器,帮助我们去发送视频链接的url
# 使用video_data 去接收,自定义命名.
# 通过发送请求会返回一个响应对象,从响应对象中提取数据,因为视频是个二进制数据,所以需要通过.content 把二进制数据反馈出来
video_data = requests.get(video_url, headers=headers).content
# 4.保存数据, --- 保存到目标文件夹中
# 目标文件夹需要新建,在项目中新建一个 video 文件夹,将爬取的视频保存到 video 文件夹中
# 需要知道 video01 文件夹在哪个位置
# 通过 with open 将文件夹目录和标题保存到文件夹中 video\\ 双斜杠表示相对路径 文件名称以 data_title 命名
# 视频数据是二进制数据,所以使用 wb 的方式进行写入 as 别名为 f
# 通过 f.write 将视频数据传递进去
# with open('video01\\' + video_title01, 'wb') as f:
with open(video_title01, 'wb') as f:
f.write(video_data)
print('下载完成。。。\n')
if __name__ == '__main__':
video_spider()
右键运行,结果如下:
本地目录截图如下: