爬取糖豆视频

本文详细描述了如何通过爬虫技术抓取糖豆视频,包括通过xhr动态加载找到包含vid参数的包,以及注意添加防盗链头以避免被封禁。作者分享了实际代码片段,但最终因为频繁访问被限制访问。
摘要由CSDN通过智能技术生成

爬虫案例积累,以爬取糖豆视频为例:

爬取视频类型的数据一般步骤:

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下的包中,因此找到比较困难。我在爬三个视频后就被禁止访问了。

代码呈现:9854ee7dae014e0192a349598f625e5a.png

代码详情:

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)

结果展现:43a4710074234f20a22666cee0e5c865.png

被禁止访问了:f9fdbf60a2f447568cb246cc320eb485.png 

 

 

  • 33
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给你一个简单的糖豆人游戏的示例代码,供参考。 首先,我们需要定义一个糖豆人的类,其中包含糖豆人的坐标、速度和方向等属性: ```python import random class CandyMan: def __init__(self, x, y): self.x = x self.y = y self.speed = 1 self.direction = random.choice(['up', 'down', 'left', 'right']) ``` 接下来,我们定义一个游戏类,用于控制游戏的开始、结束和运行过程。在游戏开始时,我们需要创建一个糖豆人实例,并将其放置在游戏区域的中心位置。在游戏运行过程中,我们将糖豆人的位置根据其速度和方向进行更新,并检测其是否与游戏区域的边界相撞。如果糖豆人撞到了边界,游戏就结束了。如果玩家按下键盘上的箭头键,则可以改变糖豆人的方向。 ```python import pygame class CandyManGame: def __init__(self): pygame.init() self.screen = pygame.display.set_mode((400, 400)) self.clock = pygame.time.Clock() self.candy_man = CandyMan(200, 200) def run(self): running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: self.candy_man.direction = 'up' elif event.key == pygame.K_DOWN: self.candy_man.direction = 'down' elif event.key == pygame.K_LEFT: self.candy_man.direction = 'left' elif event.key == pygame.K_RIGHT: self.candy_man.direction = 'right' if self.candy_man.direction == 'up': self.candy_man.y -= self.candy_man.speed elif self.candy_man.direction == 'down': self.candy_man.y += self.candy_man.speed elif self.candy_man.direction == 'left': self.candy_man.x -= self.candy_man.speed elif self.candy_man.direction == 'right': self.candy_man.x += self.candy_man.speed if self.candy_man.x < 0 or self.candy_man.x > 400 or \ self.candy_man.y < 0 or self.candy_man.y > 400: running = False self.screen.fill((255, 255, 255)) pygame.draw.circle(self.screen, (255, 0, 0), (int(self.candy_man.x), int(self.candy_man.y)), 20) pygame.display.flip() self.clock.tick(60) pygame.quit() ``` 最后,我们可以在主程序中创建一个糖豆人游戏实例,并运行游戏: ```python if __name__ == '__main__': game = CandyManGame() game.run() ``` 这是一个简单的糖豆人游戏示例,你可以根据自己的需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习各种软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值