爬虫案例积累,以爬取糖豆视频为例:
爬取视频类型的数据一般步骤:
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)
结果展现:
被禁止访问了:?
?
?