爬虫案例积累,以爬取糖豆视频为例:
爬取视频类型的数据一般步骤:
1.点击media,刷新,播放一个视频,会刷新一个包,点击发现是播放视频的包,
2.复制这个包url中的关键字,在搜索框中进行搜索,看有哪些包有关键字。
3.搜索后找到有play_url的包
4.看这个包的url,观察有什么规律
5.以糖豆视频为例,发现这个包的url有参数vid
6.查找参数在哪个位置
7.在xhr 动态加载中找到包,发现其中json数据中有vid的数据。
8.访问xhr 中的包获取vid数据,利用获取到的vid数据拼凑含有play_url的包的链接,访问这个链接,获取play_url
9.多页爬取,观察xhr 包的链接有什么规律,发现参数为页数,即可多页爬取
注意:访问视频play_url时,必须headers中加上防盗链,否则只会爬取五秒中视频
总结:这一案例与爬取好看视频最大的区别在于,它的play_url并不在xhr下的包中,因此找到比较困难。我在爬三个视频后就被禁止访问了。
代码呈现:
代码详情:
import requests
import os
filename = '糖豆视频//'
if not os.path.exists(filename):
os.mkdir(filename)
def down_load(page):
for page in range(page):
page = page+2
url = f'https://api-h5.tangdou.com/mtangdou/home/feed?page={page}&num=32&uuid=1682063965069_81146'
headers = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
}
response = requests.get(url=url,headers=headers)
for index in response.json()['data']:
video_id = index['vid']
title = index['title']
print(video_id,title)
link = f'https://api-h5.tangdou.com/mtangdou/video/play?vid={video_id}&uuid='
json_data = requests.get(url=link,headers=headers).json()
play_url = json_data['data']['play_url']
print(play_url)
headers1 = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
'Referer':
'https: // www.tangdou.com /'
}
video_content = requests.get(url=play_url,headers=headers1).content
with open(filename+title+'.mp4',mode='wb') as f:
f.write(video_content)
结果展现:
被禁止访问了: