好看视频
需求分析
爬取首页的视频,并分类存储于相应的文件夹内,视频名为网站上显示的文件名。
页面分析
打开好看视频首页,点击刷新会发现,每一次显示的视频是不一样的,所以爬取到的视频会出现跟看到的不一致的情况。
视频首页有推荐,影视,音乐,vlog,游戏等标签,我们可以设置生成相应名称的文件夹。
选择一个视频,点右键检查。光标定位到<img class 这个标签内,但是在里面只找到图片的utl,没有相对应的视频链接,在网页空白地方点右键,检查网页源码,也没有发现此视频相关的信息,因此可以判断视频数据不在网页源码中。
我们可以通过查看数据接口的方式查看,点击Network(网络) --> XHR ,进入后在网页空白地方点击刷新。
如上图所示,我们点击左侧“文件”下"feed?tab"开头的文件(其他几个文件里的url里均无内容),复制请求url地址,到网页中打开(需要JSONView,浏览器右上角三个点,扩展,把"JSONView-for-Chrome-master"文件夹下的"WebContent"文件拖到浏览器中,重启浏览器就可以了),我们可以看到数据是以嵌套字典的形式存放,我们按照取字典关键字的方式进行取值,就可以得到视频所在的url,直接向这个url发起请求,就可以得到想要的视频
但是经过爬取发现文件中只存放了5个视频,这时我们回到检查网页界面,随着鼠标在空白地方下滑,在左侧文件下面陆续出现了多个feed?tab"开头的文件,经过分析,他们区别在于"tab ="里的内容,其他部分的内容都一样,这时我们可以把"tab ="里不同的内容存放于列表中,利用遍历取出内容,拼接到url中进行取值,就可以得到多个不同栏目的内容。
代码实现
import requests
import time
import os
lis = ['影视', '音乐', 'VLOG', '游戏']
lis1 = ['yingshi_new', 'yunying_vlog', 'yunying_vlog', 'youxi_new', ]
"""lis里的名字用于创建文件夹,lis1里的内容是放到url里进行网页的循环爬取
对两个文件进行zip打包,再用遍历取出两个值,用于不同的地方
如果lis和lis1的内容一样,创建的文件夹名字就是里面英文的内容"""
for i, m in zip(lis, lis1):
data_dir = f'./video2/{
i}'
os.makedirs(data_dir)
print(f'{
i}文件创建成功')
url = f'https://haokan.baidu.com/web/video/feed?tab={
m}&act=pcFeed&pd=pc&num=5&shuaxin_id=1630038532427'
headers