爬虫---爬取b站小视频

分析b站小视频

1、进入到抓取链接地址
在这里插入图片描述
2、分析抓取链接内容
通过F12或者抓包工具进行查看我们需要爬取的视频在哪里存放,页面以ajax动态加载的
在这里插入图片描述
3、分析请求内容和请求参数
通过查看请求内容得到这些数据

1、请求的接口地址

2、请求方式为get

3、请求参数为

page_size 显示的个数
next_offset 动态跳转页面
tag  搜索标题
platfrom (应该是pc端)

在这里插入图片描述
在这里插入图片描述
分析了页面内容,那么动手来写代码,爬取视频下来

爬取b站小视频

开始写代码之前呢,我们也要一步一步的来,分清楚每一步都是干什么用的,这样的话才能让我们写的代码更加清除。

1、构建请求信息,请求需要爬取的地址

# 构建请求信息,获取数据信息
def get_json(url,ajax):
    # 构建请求信息
    params = {
        'page_size':10,
        'next_offset': ajax,
        'tag':'今日热门',
        'platform':'pc'
    }
    # 防止请求失败
    try:
        html = requests.get(url,params=params,headers=headers).json()
        return html
    except BaseException:
        print('页面加载失败')

2、进行访问链接,下载视频

# 获取视频信息
def get_video(viedeo_url,path):
    # 取出来视频的名称和地址
    r2 = requests.get(viedeo_url,headers=headers)
    with open(path,'wb')as f:
        f.write(r2.content)

3、保存下载的视频

infos=html['data']['items']
        for info in infos:
            title = info['item']['description']#小视频的标题
            video_url = info['item']['video_playurl']#视频地址
            print(title,video_url)
            #为了防止视频没有video_url
            try:
                get_video(video_url,path=r"E:\app\视频\%s.mp4"%title)
                print("成功下载一个")
            except BaseException:
                print("下载失败")
                pass

完整代码

import requests
import random
import time
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36"
}
def get_json(url,ajax):
    # 构建请求信息
    params = {
        'page_size':10,
        'next_offset': ajax,
        'tag':'今日热门',
        'platform':'pc'
    }
    # 防止请求失败
    try:
        html = requests.get(url,params=params,headers=headers).json()
        return html
    except BaseException:
        print('页面加载失败')
def get_video(viedeo_url,path):
    # 取出来视频的名称和地址
    r2 = requests.get(viedeo_url,headers=headers)
    with open(path,'wb')as f:
        f.write(r2.content)
if __name__ == '__main__':
    for i in range(3):
        url='http://api.vc.bilibili.com/board/v1/ranking/top?'
        num=i*10+1
        html=get_json(url,num)
        infos=html['data']['items']
        for info in infos:
            title = info['item']['description']#小视频的标题
            video_url = info['item']['video_playurl']#视频地址
            print(title,video_url)
            #为了防止视频没有video_url
            try:
                get_video(video_url,path=r"E:\app\视频\%s.mp4"%title)
                print("成功下载一个")
            except BaseException:
                print("下载失败")
                pass
        # 设置加载时间
        time.sleep(random.random() * 3)

在这里插入图片描述
点赞关注~~持续分享,加入我们,了解更多。642830685,免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。

### 如何使用Python编写爬虫抓取B番剧视频 #### 环境准备 为了顺利进行数据采集工作,建议先准备好开发环境。推荐使用 Python 3.x 版本并安装必要的第三方库,如 `requests` 和 `BeautifulSoup4` 或者更为强大的框架如 Scrapy 来简化网页解析过程[^2]。 #### 编写基础爬虫脚本 下面是一个简单的例子来获取 B 上某个特定页面的内容: ```python import requests from bs4 import BeautifulSoup def fetch_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, "html.parser") return soup else: raise Exception(f"Failed to load page {url}") ``` 此函数会返回给定 URL 页面经过解析后的 HTML 文档对象模型(DOM),可以用来定位所需的信息节点。 #### 抓取具体信息 对于番剧来说,通常需要关注的是标题、播放量、弹幕数量等基本信息。可以通过观察目标网结构找到这些元素对应的标签名称及其属性值,在上述 DOM 中查找相应位置的数据项。例如: ```python soup = fetch_page('https://www.bilibili.com/anime') titles = [item.string.strip() for item in soup.select('.title')] play_counts = [int(item['data-play']) for item in soup.select('.play')] danmu_counts = [int(item['data-danmaku']) for item in soup.select('.danmaku')] ``` 这里假设 `.title`, `[data-play]`, `[data-danmaku]` 是实际存在的 CSS Selectors 表达式用于匹配到相应的HTML元素。 #### 处理分页或多级页面链接 如果要访问多个列表页或是深入某条记录下的子页面,则需注意构建合理的URL模式,并循环调用之前定义好的请求方法完成遍历操作。比如当遇到带有参数化的路径时(如 `/anime?page=1`),可通过改变查询字符串中的数值实现翻页效果;而对于详情页而言,则可能涉及到正则表达式的运用以提取出完整的跳转地址。 #### 数据存储方式的选择 考虑到后期可能会对所获资料做进一步加工处理甚至建立小型数据库供其他应用读取,因此合理规划好本地缓存机制非常重要。可以选择 CSV 文件作为临时载体保存原始文本串形式的结果集,也可以考虑采用 SQLite 这样的轻型关系型数据库管理系统来进行持久化管理。 #### 遵守robots协议与道德准则 在实施任何网络爬行活动前都应该仔细阅读目标点发布的 robots.txt 文件了解允许范围内的行为边界,同时尊重版权方利益不滥用自动化工具干扰正常服务秩序。另外还需特别留意个人信息保护法规的要求以免触犯法律风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值