百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

使用python3爬取网页,aria2下载最新电影,Jellyfin播放电影

bigegpt 2025-04-28 23:27 3 浏览

前言:在我搭建好Jellyfin软件后,因为只能播放本地视频,就想能不能播放网络上的电影,可以每天自动下载并更新,这样就不用我手工下载好,再上传到NAS中播放。或许有更好的方法,那就是直接用电影播放源,那就有个问题了,没有那个视频网愿意给播放源,所以还是自己慢慢下载后再播放吧。个人对于python语言也是小白,在网络上寻找大神的脚本稍加修改得到的。

如果需要搭建jellyfin,请看我之前的博客-家庭影院Jellyfin搭建,linux网页视频播放器。

环境:centos7

工具:python3、jellyfin、shell脚本、aria2

1、安装python3

默认安装好centos7系统后,自带有python2.7.5的版本,所以需要安装python3的版本。2.7.5的版本不能删除,否则centos系统会崩溃。请从官网下载python3.8版本。

关于python2升级至python3,会有一些问题,但都能解决,请参考以下资料:

1)Centos7升级python2到python3

2)pbzip2: error while loading shared libraries: libbz2.so.1.0: cannot open shared object file

3)centos7安装python3及其配置pip(建立软连接)


2、编辑python脚本

命名脚本为movie.py,将以下复制到py脚本保存,执行python3 movie.py。查看爬取结果,是否生成文件。

脚本不是我编写的,是借鉴大神,然后根据电影天堂现在的地址和信息,做了一些改动,获取下载电影地址

# encoding: gbk
# 我们用到的库
import requests
import bs4
import re
import pandas as pd

def get_data(url):
  '''
  功能:访问 url 的网页,获取网页内容并返回
  参数:
    url :目标网页的 url
  返回:目标网页的 html 内容
  '''
  headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
  }
  
  try:
    r = requests.get(url, headers=headers)
    r.raise_for_status()
    r.encoding = 'gbk'
    return r.text
   
  except requests.HTTPError as e:
    print(e)
    print("HTTPError")
  except requests.RequestException as e:
    print(e)
  except:
    print("Unknown Error !")

def parse_data(html):
  '''
  功能:提取 html 页面信息中的关键信息,并整合一个数组并返回
  参数:html 根据 url 获取到的网页内容
  返回:存储有 html 中提取出的关键信息的数组
  '''
  bsobj = bs4.BeautifulSoup(html,'html.parser')
  info = []
   
  # 获取电影列表
  tbList = bsobj.find_all('table', attrs = {'class': 'tbspan'})
     
  # 对电影列表中的每一部电影单独处理
  for item in tbList:
  
    movie = []
    link = item.b.find_all('a')[0]
  
    # 获取电影的名称
    name = link.string
  
    # 获取详情页面的 url
    url = 'https://www.dytt8.net' + link["href"]
  
    # 将数据存放到电影信息列表里
    movie.append(name)
    movie.append(url)
     
    try:
      # 访问电影的详情页面,查找电影下载的磁力链接
      temp = bs4.BeautifulSoup(get_data(url),'html.parser')
      tbody = temp.find_all('a')
      print(tbody)
      #^magnet.*?fannouce
                   
      # 下载链接有多个(也可能没有),这里将所有链接都放进来
      for i in tbody:
        lines = i.get("href")    
        if "magnet" in lines:
          #download = lines.a.text
          #print(lines)
          movie.append(lines)
         
      print(movie)
  
      # 将此电影的信息加入到电影列表中
      info.append(movie)
       
    except Exception as e:
      print(e)
   
  return info


def save_data(data):
  '''
  功能:将 data 中的信息输出到文件中/或数据库中。
  参数:data 将要保存的数据 
  '''
  filename = 'C:/Users/Administrator/Desktop/movie.txt'
   
  dataframe = pd.DataFrame(data)
  dataframe.to_csv(filename, mode='a', index=False, sep=';', header=False)


def main():
  # 循环爬取多页数据
  #for page in range(1, 114):
   # print('正在爬取:第' + str(page) + '页......')    
    # 根据之前分析的 URL 的组成结构,构造新的 url
    #if page == 1:
    #  index = 'index'
    #else:
    #  index = 'index_' + str(page)      
    # url = 'https://www.dy2018.com/2/'+ index +'.html'
    #url='https://www.dy2018.com/2/index.html'
    url='https://www.dytt8.net/html/gndy/dyzz/index.html'
    # 依次调用网络请求函数,网页解析函数,数据存储函数,爬取并保存该页数据
    html = get_data(url)
    movies = parse_data(html)
    save_data(movies)
     
    #print('第' + str(page) + '页完成!')


if __name__ == '__main__':
  print('爬虫启动成功!')
  main()
  print('爬虫执行完毕!')


3、安装aria2

安装教程,请访问我的博客第一条,安装nextcloud里面有详细的安装aria2教程


4、编写aria2下载的shell脚本

#!/bin/bash
cd /downloads
count=0
#/root/shell/movie.txt,这个地址是movie.py执行后生成的下载地址,请根据你实际的地址填写
route=/root/shell/movie.txt
name=(`awk -F ";" '{print $1}' $route | cut -d '《' -f2|cut -d '》' -f1 | cut -d '/' -f1`)
addr=(`awk -F ";" '{print $3}' $route`)
nr=`awk '{print NR}' $route | tail -n1`
prop=`awk -F ";" '{print $3}' $route | cut -d '&' -f2 | awk -F "." '{print $8}'`

for ((i=0; i<=nr; i++))
do
	let count++
	echo "正在下载第$count个电影,《${name[$i]}》"
	sudo -u www nohup aria2c -o "${name[$i]}.${prop[$i]}" "${addr[$i]}" &
	echo "第$count个电影完成创建,转后台下载中"
	sleep 2
done

rm -rf /root/shell/movie.txt

5、测试

执行脚本,请注意先后顺序,先执行python3 movie.py。等待爬取下载电影地址完成后,执行sh movie.sh。


6、增加自动任务,添加到crontab

crontab -e中增加以下信息,获取这个方法不完善,但仍在改进

#每2天运行python脚本,获取电影天堂下载地址
20 1 */2 * * python3 /root/shell/movie.py
#每2天运行一次aria2下载电影
30 1 */2 * * sh /root/shell/movie.sh


7、使用jellyfin添加媒体库

在这里,把媒体库的自动扫描调整为每个小时都扫描一次,这样可以很快的增加到媒体库。

至此,已经完成了自动从电影网下载电影,并自动扫描到媒体库,就可以不用管了,每2天自动更新。写的脚本只下载了详情页的第一页,如果想下载很多页,请把主方法中的循环打开调整数字就可以了。

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...