优雅草采集器系统全面开源-优雅草YYC采集器系统不同版本的合集整体开源yyc-gather-采集器开源-优雅草央千澈

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 优雅草采集器系统全面开源-优雅草YYC采集器系统不同版本的合集整体开源yyc-gather-采集器开源-优雅草央千澈

优雅草采集器系统全面开源-优雅草YYC采集器系统不同版本的合集整体开源yyc-gather-采集器开源-优雅草央千澈

2025年1月5日yyc采集器将会不断的完善,本产品目前全面开源,会不断增加各种不同形式的采集器软件,我们把文件夹目录分了n个,后续都会直接分目录即可,不单独建立不同的采集器库,懒得麻烦了,采集数据可能会涉及多种法律问题,具体取决于数据的类型、采集方式、用途等诸多因素,请一定要在法律允许的范围内使用,否则后果自负。

源代码开源

开源下载地址:

https://gitee.com/youyacao/yyc-gather

2019年最初松鼠视频python-优雅草采集器

文件目录名:2019songshu

当年这个采集器做试验采集目标是以dy来采集的,可以采集到很多视频,当年只是测试了音乐和舞蹈分类。

量子蜘蛛-优雅草采集器

文件名目录名: liangzi

爬取量子资源网数据
dbconf.py是数据库配置
myclass_back.json是分类原始数据 在这里查看需要采集的分类,复制分类到  myclass.py中进行采集
安装好requirements.txt中的第三方包后就可以开始用命令开始采集
采集命令:scrapy  crawl liangzi

myclass.py是需要爬取的分类树,这里可以控制爬取的分类

量子蜘蛛优雅草采集器 主要是为了给雪花版提供的,这里包含了采集演员大数据的问题,还有一些其它影视评分相关内容,当年我们采集了接近50万条内容做测试。

相对内容更丰富:

vod_id = scrapy.Field()
    vod_name = scrapy.Field()
    vod_sub = scrapy.Field()
    type_id = scrapy.Field()
    super_type_id = scrapy.Field()
    type_name = scrapy.Field()
    vod_time = scrapy.Field()
    vod_remarks = scrapy.Field()
    vod_play_from = scrapy.Field()
    vod_pic = scrapy.Field() # 封面
    vod_play_url = scrapy.Field() # 播放地址
    vod_down_url = scrapy.Field() # 下载地址
    vod_actor = scrapy.Field() # 演员
    vod_director = scrapy.Field() # 导演
    vod_blurb = scrapy.Field() # 简介
    vod_area = scrapy.Field() # 国家
    vod_pubdate = scrapy.Field() # 上映时间
    vod_score = scrapy.Field() # 豆瓣评分
    vod_lang = scrapy.Field() # 语言
    vod_year = scrapy.Field() # 年份

pipelines.py 文件预览

复制class LiangziSpridePipeline:
    def __init__(self):
        self.wb = openpyxl.Workbook()
        self.ws = self.wb.active
        self.ws.title = 'Video'
        self.ws.append(('已更新集数(数字)', '是否已完结(1:0)', '分类ID(字典管理可查)', '题材ID(字典管理可查)',
                        '地区/国家ID', '年份ID(字典管理可查)', '标题', '副标题', '介绍', '时长',
                        '评分(数字)', '上映时间', '演员表', '查看次数(数字)', '点赞次数(数字)', '分享次数(数字)',
                        '收藏次数(数字)', '关联ID', '导演', '语言', '状态(0:删除1:待审核2:审核通过)',
                        '采集锁定(0:否1:是)'))
    def close_spider(self, spider):
        self.wb.save('体育视频.xlsx')
    def process_item(self, item, spider):
        vod_id = item.get('vod_id', '')
        vod_name = item.get('vod_name', '')
        type_id = item.get('type_id', '')
        super_type_id = item.get('super_type_id', '')
        type_name = item.get('type_name', '')
        vod_sub = item.get('vod_sub', '')
        vod_time = item.get('vod_time', '')
        vod_remarks = item.get('vod_remarks', '')
        vod_play_from = item.get('vod_play_from', '')
        vod_pic = item.get('vod_pic', '')  # 封面
        vod_play_url = item.get('vod_play_url', '')  # 播放地址
        vod_down_url = item.get('vod_down_url', '')  # 下载地址
        vod_actor = item.get('vod_actor', '')  # 演员
        vod_director = item.get('vod_director', '')  # 导演
        vod_blurb = item.get('vod_blurb', '')  # 简介
        vod_area = item.get('vod_area', '')  # 国家
        vod_score = item.get('vod_score', '')  # 评分
        vod_pubdate = item.get('vod_pubdate', '')  # 上映时间
        vod_lang = item.get('vod_lang', '')  # 语言
        vod_year = item.get('vod_year', '')  # 年份
        if type_id == 40:
            self.ws.append(
                (vod_remarks, '是否已完结', type_id, '题材ID', vod_area, vod_year, vod_name, vod_sub, vod_blurb,
                 '时长', vod_score, vod_pubdate, vod_actor, '查看次数', '点赞次数', '分享次数', '收藏次数',
                 super_type_id, vod_director, vod_lang, 1, 1))
        return item
class hanjuSpridePipeline:
    def __init__(self):
        self.wb = openpyxl.Workbook()
        self.ws = self.wb.active
        self.ws.title = 'Video'
        self.ws.append(('已更新集数(数字)', '是否已完结(1:0)', '分类ID(字典管理可查)', '题材ID(字典管理可查)',
                        '地区/国家ID', '年份ID(字典管理可查)', '标题', '副标题', '介绍', '时长',
                        '评分(数字)', '上映时间', '演员表', '查看次数(数字)', '点赞次数(数字)', '分享次数(数字)',
                        '收藏次数(数字)', '关联ID', '导演', '语言', '状态(0:删除1:待审核2:审核通过)',
                        '采集锁定(0:否1:是)'))
    def close_spider(self, spider):
        self.wb.save('韩剧视频.xlsx')
    def process_item(self, item, spider):
        # vod_id = item.get('vod_id', '')
        vod_name = item.get('vod_name', '')
        type_id = item.get('type_id', '')
        super_type_id = item.get('super_type_id', '')
        type_name = item.get('type_name', '')
        vod_sub = item.get('vod_sub', '')
        vod_time = item.get('vod_time', '')
        vod_remarks = item.get('vod_remarks', '')
        vod_play_from = item.get('vod_play_from', '')
        vod_pic = item.get('vod_pic', '')  # 封面
        vod_play_url = item.get('vod_play_url', '')  # 播放地址
        vod_down_url = item.get('vod_down_url', '')  # 下载地址
        vod_actor = item.get('vod_actor', '')  # 演员
        vod_director = item.get('vod_director', '')  # 导演
        vod_blurb = item.get('vod_blurb', '')  # 简介
        vod_area = item.get('vod_area', '')  # 国家
        vod_score = item.get('vod_score', '')  # 评分
        vod_pubdate = item.get('vod_pubdate', '')  # 上映时间
        vod_lang = item.get('vod_lang', '')  # 语言
        vod_year = item.get('vod_year', '')  # 年份
        if type_id == 15:
            self.ws.append(
                (vod_remarks, '是否已完结', type_id, '题材ID', vod_area, vod_year, vod_name, vod_sub, vod_blurb,
                 '时长', vod_score, vod_pubdate, vod_actor, '查看次数', '点赞次数', '分享次数', '收藏次数',
                 super_type_id, vod_director, vod_lang, 1, 1))
        return item
class MySqlSpridePipeline:
    def __init__(self):
        self.mysqlsession = None
        self.video_type_dy = [6, 7, 8, 9, 10, 11, 12, 20, 34, 45]
        self.video_type_esps = [13, 14, 15, 16, 21, 22, 23, 24, 46]
    def open_spider(self, spider):
        engine = create_engine('mysql+pymysql://'+dbconf.get('user')+':'+dbconf.get('password')+'@'+dbconf.get('host')+ '/'+dbconf.get('database')+'')
        Base.metadata.create_all(engine)
        # 创建 SQLAlchemy 会话对象
        Session = sessionmaker(bind=engine)
        self.mysqlsession = Session()
    def close_spider(self, spider):
        self.mysqlsession.close()
    def process_item(self, item, spider):
        # vod_id = item.get('vod_id', '')
        vod_name = item.get('vod_name', '')
        type_id = item.get('type_id', '')
        super_type_id = item.get('super_type_id', '')
        type_name = item.get('type_name', '')
        vod_sub = item.get('vod_sub', '')
        vod_time = item.get('vod_time', '')
        vod_remarks = item.get('vod_remarks', '')
        vod_play_from = item.get('vod_play_from', '')
        vod_pic = item.get('vod_pic', '')  # 封面
        vod_play_url = item.get('vod_play_url', '')  # 播放地址
        vod_down_url = item.get('vod_down_url', '')  # 下载地址
        vod_actor = item.get('vod_actor', '')  # 演员
        vod_director = item.get('vod_director', '')  # 导演
        vod_blurb = item.get('vod_blurb', '')  # 简介
        vod_area = item.get('vod_area', '')  # 国家
        vod_score = item.get('vod_score', '')  # 评分
        vod_pubdate = item.get('vod_pubdate', '')  # 上映时间
        vod_lang = item.get('vod_lang', '')  # 语言
        vod_year = item.get('vod_year', '')  # 年份
        movie_data = self.mysqlsession.query(Movie).filter(Movie.title.like("%" + vod_name + "%")).first()
        if movie_data is not None:  # Movie数据查到了
            if not movie_data.details:
                parts = vod_play_url.split('$$$')
                urls_list = []
                exp_list = []
                for part in parts:
                    exp = [x.split('$')[0] for x in part.split('#')]
                    urls = [(x.split('$')[1]).replace("\\", "") for x in part.split('#')]
                    exp_list.append(exp)  # 集数
                    urls_list.append({exp[i]: urls[i] for i in range(len(exp))})  # url地址
                parts = vod_play_url.split('$$$')
                urls_list = []
                for part in parts:
                    urls = [x.split('$')[1].replace("\\", "") for x in part.split('#')]
                    exp = [x.split('$')[0] for x in part.split('#')]
                    urls_list.append({exp[i]: urls[i] for i in range(len(exp))})
                for tt in urls_list[0]:
                    number_part = re.search(r'\d+', tt).group()
                    number = int(number_part)  # 纯数字集数   带文字的  直接用tt
                    details_filter = {
                        'movie_id': movie_data.id,
                        'title': vod_name + tt,
                        'url': urls_list[0][tt],
                        'sort': number,
                        'is_free': 1,
                    }
                    new_data1 = MovieDetail(**details_filter)
                    self.mysqlsession.add(new_data1)
        else:  # Movie数据没有查到
            query_filter = {'category_id': type_id, 'region': vod_area, 'year': vod_year, 'title': vod_name,
                            'subtitle': vod_sub,
                            'intro': vod_blurb, 'score': vod_score, 'release_date': vod_pubdate, 'thumb': vod_pic,
                            'actor_list': vod_actor, 'relate_id': super_type_id, 'status': 1,
                            'director': vod_director, 'language': vod_lang, 'type': 3}
            if type_id in self.video_type_dy:
                query_filter['type'] = 1
            if type_id in self.video_type_esps:
                query_filter['type'] = 2
            parts = vod_play_url.split('$$$')
            urls_list = []
            exp_list = []
            for part in parts:
                exp = [x.split('$')[0] for x in part.split('#')]
                urls = [(x.split('$')[1]).replace("\\", "") for x in part.split('#')]
                exp_list.append(exp)  # 集数
                urls_list.append({exp[i]: urls[i] for i in range(len(exp))})  # url地址
            parts = vod_play_url.split('$$$')
            urls_list = []
            for part in parts:
                urls = [x.split('$')[1].replace("\\", "") for x in part.split('#')]
                exp = [x.split('$')[0] for x in part.split('#')]
                urls_list.append({exp[i]: urls[i] for i in range(len(exp))})
            details = []
            for tt in urls_list[0]:
                number_part = re.search(r'\d+', tt).group()
                number = int(number_part)  # 纯数字集数   带文字的  直接用tt
                details_filter = {
                    'title': vod_name + tt,
                    'url': urls_list[0][tt],
                    'sort': number,
                    'is_free': 1,
                }
                details.append(MovieDetail(**details_filter))
            query_filter['details'] = details
            new_data = Movie(**query_filter)
            self.mysqlsession.add(new_data)
        self.mysqlsession.commit()
        return item

python-yt_dlp方法视频采集器

文件名目录名:python-yt_dlp

使用方法搜索:

【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈

本采集器很简单主要是以python yt_dlp库方法来采集下载m3u8视频。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
10月前
|
开发框架 Java 编译器
2025年1月推荐-工欲善其事,必先利其器-程序员必备之-核心基本工具—不要看什么国际排行榜-没有用-编辑器和编译器推荐-优雅草央千澈
2025年1月推荐-工欲善其事,必先利其器-程序员必备之-核心基本工具—不要看什么国际排行榜-没有用-编辑器和编译器推荐-优雅草央千澈
398 1
|
10月前
|
人工智能 算法 计算机视觉
【01】opencv项目实践第一步opencv是什么-opencv项目实践-opencv完整入门以及项目实践介绍-opencv以土壤和水滴分离的项目实践-人工智能AI项目优雅草卓伊凡
【01】opencv项目实践第一步opencv是什么-opencv项目实践-opencv完整入门以及项目实践介绍-opencv以土壤和水滴分离的项目实践-人工智能AI项目优雅草卓伊凡
314 63
【01】opencv项目实践第一步opencv是什么-opencv项目实践-opencv完整入门以及项目实践介绍-opencv以土壤和水滴分离的项目实践-人工智能AI项目优雅草卓伊凡
|
10月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
902 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
10月前
|
网络协议 算法 数据建模
IP 地址,包括 IPv6 怎么申请 SSL证书来实现 https
很多企业单位已经开始在使用 IPv6 资源,跟 IPv4 一样,IPv6也是需要SSL证书的。在目前的SSL证书品牌,KeepTrust 是可以支持 IPv6 地址的。跟普通IP地址一样,给IPv6签发SSL证书也是需要验证申请者对 IP 地址的管理权限的。如果是 OV 版,还需要验证组织信息的真实性。
|
10月前
|
安全 数据安全/隐私保护 Android开发
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
1394 75
|
11月前
|
存储 NoSQL 关系型数据库
从大数据到大模型:如何做到“心无桎梏,身无藩篱”
在大数据和大模型的加持下,现代数据技术释放了巨大的技术红利,通过多种数据范式解除了数据的桎梏,使得应用程序达到了“心无桎梏,身无藩篱”的自在境界,那么现代应用有哪些数据范式呢?这正是本文尝试回答的问题。
1582 101
|
11月前
|
机器学习/深度学习 人工智能 JSON
【实战干货】AI大模型工程应用于车联网场景的实战总结
本文介绍了图像生成技术在AIGC领域的发展历程、关键技术和当前趋势,以及这些技术如何应用于新能源汽车行业的车联网服务中。
1080 94
|
11月前
|
弹性计算 运维 监控
云资源运维难?阿里云免费工具来帮忙
阿里云推出免费运维工具——云服务诊断,帮助用户提升对云资源的运维效率、降低门槛、减轻负担。其核心功能包括「健康状态」和「诊断」。通过「健康状态」可实时查看云资源是否正常;「诊断」功能则能快速排查网络、配置、安全等问题,并提供修复建议,助您迅速恢复业务。体验评测活动火热进行中,参与即有机会赢取索尼头戴耳机、小米背包等好礼。活动链接:https://developer.aliyun.com/topic/cloud-health。
883 24
|
10月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
10月前
|
存储 机器学习/深度学习 人工智能
Memory Layers:如何在不增加算力成本的情况下扩大模型的参数容量?Meta 开源解决方法
Meta 开源的 Memory Layers 技术,通过键值查找机制扩展大模型参数,显著提升模型性能,尤其适用于事实性任务。
220 10
Memory Layers:如何在不增加算力成本的情况下扩大模型的参数容量?Meta 开源解决方法